brintos

brintos / llvm-project-archived public Read only

0
0
Text · 161.1 KiB · 60d3b4a Raw
4380 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_v2f16_v3f16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2f16_v3f16__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 half> asm "; def $0", "=v"()13  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> poison15  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 416  ret void17}18 19define void @v_shuffle_v2f16_v3f16__0_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_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_dword v2, v0, s[16:17]28; GFX900-NEXT:    s_waitcnt vmcnt(0)29; GFX900-NEXT:    s_setpc_b64 s[30:31]30;31; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_u:32; GFX90A:       ; %bb.0:33; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX90A-NEXT:    v_mov_b32_e32 v2, 035; GFX90A-NEXT:    ;;#ASMSTART36; GFX90A-NEXT:    ; def v[0:1]37; GFX90A-NEXT:    ;;#ASMEND38; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]39; GFX90A-NEXT:    s_waitcnt vmcnt(0)40; GFX90A-NEXT:    s_setpc_b64 s[30:31]41;42; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_u:43; GFX942:       ; %bb.0:44; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)45; GFX942-NEXT:    v_mov_b32_e32 v2, 046; GFX942-NEXT:    ;;#ASMSTART47; GFX942-NEXT:    ; def v[0:1]48; GFX942-NEXT:    ;;#ASMEND49; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]50; GFX942-NEXT:    s_waitcnt vmcnt(0)51; GFX942-NEXT:    s_setpc_b64 s[30:31]52  %vec0 = call <4 x half> asm "; def $0", "=v"()53  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>54  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 poison>55  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 456  ret void57}58 59define void @v_shuffle_v2f16_v3f16__1_u(ptr addrspace(1) inreg %ptr) {60; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_u:61; GFX900:       ; %bb.0:62; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)63; GFX900-NEXT:    ;;#ASMSTART64; GFX900-NEXT:    ; def v[0:1]65; GFX900-NEXT:    ;;#ASMEND66; GFX900-NEXT:    v_mov_b32_e32 v2, 067; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 1668; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]69; GFX900-NEXT:    s_waitcnt vmcnt(0)70; GFX900-NEXT:    s_setpc_b64 s[30:31]71;72; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_u:73; GFX90A:       ; %bb.0:74; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX90A-NEXT:    ;;#ASMSTART76; GFX90A-NEXT:    ; def v[0:1]77; GFX90A-NEXT:    ;;#ASMEND78; GFX90A-NEXT:    v_mov_b32_e32 v2, 079; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 1680; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]81; GFX90A-NEXT:    s_waitcnt vmcnt(0)82; GFX90A-NEXT:    s_setpc_b64 s[30:31]83;84; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_u:85; GFX942:       ; %bb.0:86; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)87; GFX942-NEXT:    ;;#ASMSTART88; GFX942-NEXT:    ; def v[0:1]89; GFX942-NEXT:    ;;#ASMEND90; GFX942-NEXT:    v_mov_b32_e32 v2, 091; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 1692; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]93; GFX942-NEXT:    s_waitcnt vmcnt(0)94; GFX942-NEXT:    s_setpc_b64 s[30:31]95  %vec0 = call <4 x half> asm "; def $0", "=v"()96  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>97  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 poison>98  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 499  ret void100}101 102define void @v_shuffle_v2f16_v3f16__2_u(ptr addrspace(1) inreg %ptr) {103; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_u:104; GFX900:       ; %bb.0:105; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX900-NEXT:    v_mov_b32_e32 v2, 0107; GFX900-NEXT:    ;;#ASMSTART108; GFX900-NEXT:    ; def v[0:1]109; GFX900-NEXT:    ;;#ASMEND110; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]111; GFX900-NEXT:    s_waitcnt vmcnt(0)112; GFX900-NEXT:    s_setpc_b64 s[30:31]113;114; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_u:115; GFX90A:       ; %bb.0:116; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX90A-NEXT:    v_mov_b32_e32 v2, 0118; GFX90A-NEXT:    ;;#ASMSTART119; GFX90A-NEXT:    ; def v[0:1]120; GFX90A-NEXT:    ;;#ASMEND121; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]122; GFX90A-NEXT:    s_waitcnt vmcnt(0)123; GFX90A-NEXT:    s_setpc_b64 s[30:31]124;125; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_u:126; GFX942:       ; %bb.0:127; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX942-NEXT:    v_mov_b32_e32 v2, 0129; GFX942-NEXT:    ;;#ASMSTART130; GFX942-NEXT:    ; def v[0:1]131; GFX942-NEXT:    ;;#ASMEND132; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]133; GFX942-NEXT:    s_waitcnt vmcnt(0)134; GFX942-NEXT:    s_setpc_b64 s[30:31]135  %vec0 = call <4 x half> asm "; def $0", "=v"()136  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>137  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 poison>138  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4139  ret void140}141 142define void @v_shuffle_v2f16_v3f16__3_u(ptr addrspace(1) inreg %ptr) {143; GFX9-LABEL: v_shuffle_v2f16_v3f16__3_u:144; GFX9:       ; %bb.0:145; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)146; GFX9-NEXT:    s_setpc_b64 s[30:31]147  %vec0 = call <4 x half> asm "; def $0", "=v"()148  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>149  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 poison>150  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4151  ret void152}153 154define void @v_shuffle_v2f16_v3f16__4_u(ptr addrspace(1) inreg %ptr) {155; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_u:156; GFX900:       ; %bb.0:157; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX900-NEXT:    ;;#ASMSTART159; GFX900-NEXT:    ; def v[0:1]160; GFX900-NEXT:    ;;#ASMEND161; GFX900-NEXT:    v_mov_b32_e32 v2, 0162; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16163; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]164; GFX900-NEXT:    s_waitcnt vmcnt(0)165; GFX900-NEXT:    s_setpc_b64 s[30:31]166;167; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_u:168; GFX90A:       ; %bb.0:169; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)170; GFX90A-NEXT:    ;;#ASMSTART171; GFX90A-NEXT:    ; def v[0:1]172; GFX90A-NEXT:    ;;#ASMEND173; GFX90A-NEXT:    v_mov_b32_e32 v2, 0174; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16175; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]176; GFX90A-NEXT:    s_waitcnt vmcnt(0)177; GFX90A-NEXT:    s_setpc_b64 s[30:31]178;179; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_u:180; GFX942:       ; %bb.0:181; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)182; GFX942-NEXT:    ;;#ASMSTART183; GFX942-NEXT:    ; def v[0:1]184; GFX942-NEXT:    ;;#ASMEND185; GFX942-NEXT:    v_mov_b32_e32 v2, 0186; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 16187; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]188; GFX942-NEXT:    s_waitcnt vmcnt(0)189; GFX942-NEXT:    s_setpc_b64 s[30:31]190  %vec0 = call <4 x half> asm "; def $0", "=v"()191  %vec1 = call <4 x half> asm "; def $0", "=v"()192  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>193  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>194  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 poison>195  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4196  ret void197}198 199define void @v_shuffle_v2f16_v3f16__5_u(ptr addrspace(1) inreg %ptr) {200; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_u:201; GFX900:       ; %bb.0:202; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)203; GFX900-NEXT:    v_mov_b32_e32 v2, 0204; GFX900-NEXT:    ;;#ASMSTART205; GFX900-NEXT:    ; def v[0:1]206; GFX900-NEXT:    ;;#ASMEND207; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]208; GFX900-NEXT:    s_waitcnt vmcnt(0)209; GFX900-NEXT:    s_setpc_b64 s[30:31]210;211; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_u:212; GFX90A:       ; %bb.0:213; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX90A-NEXT:    v_mov_b32_e32 v2, 0215; GFX90A-NEXT:    ;;#ASMSTART216; GFX90A-NEXT:    ; def v[0:1]217; GFX90A-NEXT:    ;;#ASMEND218; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]219; GFX90A-NEXT:    s_waitcnt vmcnt(0)220; GFX90A-NEXT:    s_setpc_b64 s[30:31]221;222; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_u:223; GFX942:       ; %bb.0:224; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)225; GFX942-NEXT:    v_mov_b32_e32 v2, 0226; GFX942-NEXT:    ;;#ASMSTART227; GFX942-NEXT:    ; def v[0:1]228; GFX942-NEXT:    ;;#ASMEND229; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]230; GFX942-NEXT:    s_waitcnt vmcnt(0)231; GFX942-NEXT:    s_setpc_b64 s[30:31]232  %vec0 = call <4 x half> asm "; def $0", "=v"()233  %vec1 = call <4 x half> asm "; def $0", "=v"()234  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>235  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>236  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 poison>237  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4238  ret void239}240 241define void @v_shuffle_v2f16_v3f16__5_0(ptr addrspace(1) inreg %ptr) {242; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_0:243; GFX900:       ; %bb.0:244; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)245; GFX900-NEXT:    ;;#ASMSTART246; GFX900-NEXT:    ; def v[0:1]247; GFX900-NEXT:    ;;#ASMEND248; GFX900-NEXT:    s_mov_b32 s4, 0x5040100249; GFX900-NEXT:    v_mov_b32_e32 v3, 0250; GFX900-NEXT:    ;;#ASMSTART251; GFX900-NEXT:    ; def v[1:2]252; GFX900-NEXT:    ;;#ASMEND253; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s4254; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]255; GFX900-NEXT:    s_waitcnt vmcnt(0)256; GFX900-NEXT:    s_setpc_b64 s[30:31]257;258; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_0:259; GFX90A:       ; %bb.0:260; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX90A-NEXT:    ;;#ASMSTART262; GFX90A-NEXT:    ; def v[0:1]263; GFX90A-NEXT:    ;;#ASMEND264; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100265; GFX90A-NEXT:    v_mov_b32_e32 v4, 0266; GFX90A-NEXT:    ;;#ASMSTART267; GFX90A-NEXT:    ; def v[2:3]268; GFX90A-NEXT:    ;;#ASMEND269; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s4270; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]271; GFX90A-NEXT:    s_waitcnt vmcnt(0)272; GFX90A-NEXT:    s_setpc_b64 s[30:31]273;274; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_0:275; GFX942:       ; %bb.0:276; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)277; GFX942-NEXT:    ;;#ASMSTART278; GFX942-NEXT:    ; def v[0:1]279; GFX942-NEXT:    ;;#ASMEND280; GFX942-NEXT:    s_mov_b32 s2, 0x5040100281; GFX942-NEXT:    v_mov_b32_e32 v4, 0282; GFX942-NEXT:    ;;#ASMSTART283; GFX942-NEXT:    ; def v[2:3]284; GFX942-NEXT:    ;;#ASMEND285; GFX942-NEXT:    s_nop 0286; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s2287; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]288; GFX942-NEXT:    s_waitcnt vmcnt(0)289; GFX942-NEXT:    s_setpc_b64 s[30:31]290  %vec0 = call <4 x half> asm "; def $0", "=v"()291  %vec1 = call <4 x half> asm "; def $0", "=v"()292  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>293  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>294  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 0>295  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4296  ret void297}298 299define void @v_shuffle_v2f16_v3f16__5_1(ptr addrspace(1) inreg %ptr) {300; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_1:301; GFX900:       ; %bb.0:302; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)303; GFX900-NEXT:    ;;#ASMSTART304; GFX900-NEXT:    ; def v[0:1]305; GFX900-NEXT:    ;;#ASMEND306; GFX900-NEXT:    s_mov_b32 s4, 0xffff307; GFX900-NEXT:    v_mov_b32_e32 v3, 0308; GFX900-NEXT:    ;;#ASMSTART309; GFX900-NEXT:    ; def v[1:2]310; GFX900-NEXT:    ;;#ASMEND311; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v0312; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]313; GFX900-NEXT:    s_waitcnt vmcnt(0)314; GFX900-NEXT:    s_setpc_b64 s[30:31]315;316; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_1:317; GFX90A:       ; %bb.0:318; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)319; GFX90A-NEXT:    ;;#ASMSTART320; GFX90A-NEXT:    ; def v[0:1]321; GFX90A-NEXT:    ;;#ASMEND322; GFX90A-NEXT:    s_mov_b32 s4, 0xffff323; GFX90A-NEXT:    v_mov_b32_e32 v4, 0324; GFX90A-NEXT:    ;;#ASMSTART325; GFX90A-NEXT:    ; def v[2:3]326; GFX90A-NEXT:    ;;#ASMEND327; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v0328; GFX90A-NEXT:    global_store_dword v4, v0, 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_v2f16_v3f16__5_1:333; GFX942:       ; %bb.0:334; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)335; GFX942-NEXT:    ;;#ASMSTART336; GFX942-NEXT:    ; def v[0:1]337; GFX942-NEXT:    ;;#ASMEND338; GFX942-NEXT:    s_mov_b32 s2, 0xffff339; GFX942-NEXT:    v_mov_b32_e32 v4, 0340; GFX942-NEXT:    ;;#ASMSTART341; GFX942-NEXT:    ; def v[2:3]342; GFX942-NEXT:    ;;#ASMEND343; GFX942-NEXT:    s_nop 0344; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v0345; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]346; GFX942-NEXT:    s_waitcnt vmcnt(0)347; GFX942-NEXT:    s_setpc_b64 s[30:31]348  %vec0 = call <4 x half> asm "; def $0", "=v"()349  %vec1 = call <4 x half> asm "; def $0", "=v"()350  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>351  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>352  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 1>353  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4354  ret void355}356 357define void @v_shuffle_v2f16_v3f16__5_2(ptr addrspace(1) inreg %ptr) {358; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_2:359; GFX900:       ; %bb.0:360; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)361; GFX900-NEXT:    ;;#ASMSTART362; GFX900-NEXT:    ; def v[0:1]363; GFX900-NEXT:    ;;#ASMEND364; GFX900-NEXT:    s_mov_b32 s4, 0x5040100365; GFX900-NEXT:    v_mov_b32_e32 v4, 0366; GFX900-NEXT:    ;;#ASMSTART367; GFX900-NEXT:    ; def v[2:3]368; GFX900-NEXT:    ;;#ASMEND369; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s4370; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]371; GFX900-NEXT:    s_waitcnt vmcnt(0)372; GFX900-NEXT:    s_setpc_b64 s[30:31]373;374; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_2:375; GFX90A:       ; %bb.0:376; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX90A-NEXT:    ;;#ASMSTART378; GFX90A-NEXT:    ; def v[0:1]379; GFX90A-NEXT:    ;;#ASMEND380; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100381; GFX90A-NEXT:    v_mov_b32_e32 v4, 0382; GFX90A-NEXT:    ;;#ASMSTART383; GFX90A-NEXT:    ; def v[2:3]384; GFX90A-NEXT:    ;;#ASMEND385; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s4386; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]387; GFX90A-NEXT:    s_waitcnt vmcnt(0)388; GFX90A-NEXT:    s_setpc_b64 s[30:31]389;390; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_2:391; GFX942:       ; %bb.0:392; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; GFX942-NEXT:    ;;#ASMSTART394; GFX942-NEXT:    ; def v[0:1]395; GFX942-NEXT:    ;;#ASMEND396; GFX942-NEXT:    s_mov_b32 s2, 0x5040100397; GFX942-NEXT:    v_mov_b32_e32 v4, 0398; GFX942-NEXT:    ;;#ASMSTART399; GFX942-NEXT:    ; def v[2:3]400; GFX942-NEXT:    ;;#ASMEND401; GFX942-NEXT:    s_nop 0402; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s2403; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]404; GFX942-NEXT:    s_waitcnt vmcnt(0)405; GFX942-NEXT:    s_setpc_b64 s[30:31]406  %vec0 = call <4 x half> asm "; def $0", "=v"()407  %vec1 = call <4 x half> asm "; def $0", "=v"()408  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>409  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>410  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 2>411  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4412  ret void413}414 415define void @v_shuffle_v2f16_v3f16__5_3(ptr addrspace(1) inreg %ptr) {416; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_3:417; GFX900:       ; %bb.0:418; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)419; GFX900-NEXT:    ;;#ASMSTART420; GFX900-NEXT:    ; def v[0:1]421; GFX900-NEXT:    ;;#ASMEND422; GFX900-NEXT:    s_mov_b32 s4, 0x5040100423; GFX900-NEXT:    v_mov_b32_e32 v2, 0424; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4425; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]426; GFX900-NEXT:    s_waitcnt vmcnt(0)427; GFX900-NEXT:    s_setpc_b64 s[30:31]428;429; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_3:430; GFX90A:       ; %bb.0:431; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX90A-NEXT:    ;;#ASMSTART433; GFX90A-NEXT:    ; def v[0:1]434; GFX90A-NEXT:    ;;#ASMEND435; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100436; GFX90A-NEXT:    v_mov_b32_e32 v2, 0437; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4438; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]439; GFX90A-NEXT:    s_waitcnt vmcnt(0)440; GFX90A-NEXT:    s_setpc_b64 s[30:31]441;442; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_3:443; GFX942:       ; %bb.0:444; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)445; GFX942-NEXT:    ;;#ASMSTART446; GFX942-NEXT:    ; def v[0:1]447; GFX942-NEXT:    ;;#ASMEND448; GFX942-NEXT:    s_mov_b32 s2, 0x5040100449; GFX942-NEXT:    v_mov_b32_e32 v2, 0450; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s2451; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]452; GFX942-NEXT:    s_waitcnt vmcnt(0)453; GFX942-NEXT:    s_setpc_b64 s[30:31]454  %vec0 = call <4 x half> asm "; def $0", "=v"()455  %vec1 = call <4 x half> asm "; def $0", "=v"()456  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>457  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>458  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 3>459  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4460  ret void461}462 463define void @v_shuffle_v2f16_v3f16__5_4(ptr addrspace(1) inreg %ptr) {464; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_4:465; GFX900:       ; %bb.0:466; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; GFX900-NEXT:    ;;#ASMSTART468; GFX900-NEXT:    ; def v[0:1]469; GFX900-NEXT:    ;;#ASMEND470; GFX900-NEXT:    s_mov_b32 s4, 0xffff471; GFX900-NEXT:    v_mov_b32_e32 v2, 0472; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v0473; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]474; GFX900-NEXT:    s_waitcnt vmcnt(0)475; GFX900-NEXT:    s_setpc_b64 s[30:31]476;477; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_4:478; GFX90A:       ; %bb.0:479; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)480; GFX90A-NEXT:    ;;#ASMSTART481; GFX90A-NEXT:    ; def v[0:1]482; GFX90A-NEXT:    ;;#ASMEND483; GFX90A-NEXT:    s_mov_b32 s4, 0xffff484; GFX90A-NEXT:    v_mov_b32_e32 v2, 0485; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v0486; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]487; GFX90A-NEXT:    s_waitcnt vmcnt(0)488; GFX90A-NEXT:    s_setpc_b64 s[30:31]489;490; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_4:491; GFX942:       ; %bb.0:492; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; GFX942-NEXT:    ;;#ASMSTART494; GFX942-NEXT:    ; def v[0:1]495; GFX942-NEXT:    ;;#ASMEND496; GFX942-NEXT:    s_mov_b32 s2, 0xffff497; GFX942-NEXT:    v_mov_b32_e32 v2, 0498; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v0499; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]500; GFX942-NEXT:    s_waitcnt vmcnt(0)501; GFX942-NEXT:    s_setpc_b64 s[30:31]502  %vec0 = call <4 x half> asm "; def $0", "=v"()503  %vec1 = call <4 x half> asm "; def $0", "=v"()504  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>505  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>506  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 4>507  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4508  ret void509}510 511define void @v_shuffle_v2f16_v3f16__5_5(ptr addrspace(1) inreg %ptr) {512; GFX900-LABEL: v_shuffle_v2f16_v3f16__5_5:513; GFX900:       ; %bb.0:514; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX900-NEXT:    ;;#ASMSTART516; GFX900-NEXT:    ; def v[0:1]517; GFX900-NEXT:    ;;#ASMEND518; GFX900-NEXT:    s_mov_b32 s4, 0x5040100519; GFX900-NEXT:    v_mov_b32_e32 v2, 0520; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4521; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]522; GFX900-NEXT:    s_waitcnt vmcnt(0)523; GFX900-NEXT:    s_setpc_b64 s[30:31]524;525; GFX90A-LABEL: v_shuffle_v2f16_v3f16__5_5:526; GFX90A:       ; %bb.0:527; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)528; GFX90A-NEXT:    ;;#ASMSTART529; GFX90A-NEXT:    ; def v[0:1]530; GFX90A-NEXT:    ;;#ASMEND531; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100532; GFX90A-NEXT:    v_mov_b32_e32 v2, 0533; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4534; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]535; GFX90A-NEXT:    s_waitcnt vmcnt(0)536; GFX90A-NEXT:    s_setpc_b64 s[30:31]537;538; GFX942-LABEL: v_shuffle_v2f16_v3f16__5_5:539; GFX942:       ; %bb.0:540; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)541; GFX942-NEXT:    ;;#ASMSTART542; GFX942-NEXT:    ; def v[0:1]543; GFX942-NEXT:    ;;#ASMEND544; GFX942-NEXT:    s_mov_b32 s2, 0x5040100545; GFX942-NEXT:    v_mov_b32_e32 v2, 0546; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s2547; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]548; GFX942-NEXT:    s_waitcnt vmcnt(0)549; GFX942-NEXT:    s_setpc_b64 s[30:31]550  %vec0 = call <4 x half> asm "; def $0", "=v"()551  %vec1 = call <4 x half> asm "; def $0", "=v"()552  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>553  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>554  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 5>555  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4556  ret void557}558 559define void @v_shuffle_v2f16_v3f16__u_0(ptr addrspace(1) inreg %ptr) {560; GFX900-LABEL: v_shuffle_v2f16_v3f16__u_0:561; GFX900:       ; %bb.0:562; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX900-NEXT:    ;;#ASMSTART564; GFX900-NEXT:    ; def v[0:1]565; GFX900-NEXT:    ;;#ASMEND566; GFX900-NEXT:    v_mov_b32_e32 v2, 0567; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0568; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]569; GFX900-NEXT:    s_waitcnt vmcnt(0)570; GFX900-NEXT:    s_setpc_b64 s[30:31]571;572; GFX90A-LABEL: v_shuffle_v2f16_v3f16__u_0:573; GFX90A:       ; %bb.0:574; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)575; GFX90A-NEXT:    ;;#ASMSTART576; GFX90A-NEXT:    ; def v[0:1]577; GFX90A-NEXT:    ;;#ASMEND578; GFX90A-NEXT:    v_mov_b32_e32 v2, 0579; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0580; GFX90A-NEXT:    global_store_dword v2, v0, 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_v2f16_v3f16__u_0:585; GFX942:       ; %bb.0:586; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX942-NEXT:    ;;#ASMSTART588; GFX942-NEXT:    ; def v[0:1]589; GFX942-NEXT:    ;;#ASMEND590; GFX942-NEXT:    v_mov_b32_e32 v2, 0591; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v0592; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]593; GFX942-NEXT:    s_waitcnt vmcnt(0)594; GFX942-NEXT:    s_setpc_b64 s[30:31]595  %vec0 = call <4 x half> asm "; def $0", "=v"()596  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>597  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 0>598  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4599  ret void600}601 602define void @v_shuffle_v2f16_v3f16__0_0(ptr addrspace(1) inreg %ptr) {603; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_0:604; GFX900:       ; %bb.0:605; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)606; GFX900-NEXT:    ;;#ASMSTART607; GFX900-NEXT:    ; def v[0:1]608; GFX900-NEXT:    ;;#ASMEND609; GFX900-NEXT:    s_mov_b32 s4, 0x5040100610; GFX900-NEXT:    v_mov_b32_e32 v2, 0611; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4612; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]613; GFX900-NEXT:    s_waitcnt vmcnt(0)614; GFX900-NEXT:    s_setpc_b64 s[30:31]615;616; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_0:617; GFX90A:       ; %bb.0:618; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)619; GFX90A-NEXT:    ;;#ASMSTART620; GFX90A-NEXT:    ; def v[0:1]621; GFX90A-NEXT:    ;;#ASMEND622; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100623; GFX90A-NEXT:    v_mov_b32_e32 v2, 0624; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4625; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]626; GFX90A-NEXT:    s_waitcnt vmcnt(0)627; GFX90A-NEXT:    s_setpc_b64 s[30:31]628;629; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_0:630; GFX942:       ; %bb.0:631; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX942-NEXT:    ;;#ASMSTART633; GFX942-NEXT:    ; def v[0:1]634; GFX942-NEXT:    ;;#ASMEND635; GFX942-NEXT:    s_mov_b32 s2, 0x5040100636; GFX942-NEXT:    v_mov_b32_e32 v2, 0637; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s2638; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]639; GFX942-NEXT:    s_waitcnt vmcnt(0)640; GFX942-NEXT:    s_setpc_b64 s[30:31]641  %vec0 = call <4 x half> asm "; def $0", "=v"()642  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>643  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> zeroinitializer644  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4645  ret void646}647 648define void @v_shuffle_v2f16_v3f16__1_0(ptr addrspace(1) inreg %ptr) {649; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_0:650; GFX900:       ; %bb.0:651; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX900-NEXT:    ;;#ASMSTART653; GFX900-NEXT:    ; def v[0:1]654; GFX900-NEXT:    ;;#ASMEND655; GFX900-NEXT:    v_mov_b32_e32 v2, 0656; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16657; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]658; GFX900-NEXT:    s_waitcnt vmcnt(0)659; GFX900-NEXT:    s_setpc_b64 s[30:31]660;661; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_0:662; GFX90A:       ; %bb.0:663; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)664; GFX90A-NEXT:    ;;#ASMSTART665; GFX90A-NEXT:    ; def v[0:1]666; GFX90A-NEXT:    ;;#ASMEND667; GFX90A-NEXT:    v_mov_b32_e32 v2, 0668; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16669; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]670; GFX90A-NEXT:    s_waitcnt vmcnt(0)671; GFX90A-NEXT:    s_setpc_b64 s[30:31]672;673; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_0:674; GFX942:       ; %bb.0:675; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)676; GFX942-NEXT:    ;;#ASMSTART677; GFX942-NEXT:    ; def v[0:1]678; GFX942-NEXT:    ;;#ASMEND679; GFX942-NEXT:    v_mov_b32_e32 v2, 0680; GFX942-NEXT:    v_alignbit_b32 v0, v0, v0, 16681; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]682; GFX942-NEXT:    s_waitcnt vmcnt(0)683; GFX942-NEXT:    s_setpc_b64 s[30:31]684  %vec0 = call <4 x half> asm "; def $0", "=v"()685  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>686  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 0>687  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4688  ret void689}690 691define void @v_shuffle_v2f16_v3f16__2_0(ptr addrspace(1) inreg %ptr) {692; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_0:693; GFX900:       ; %bb.0:694; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)695; GFX900-NEXT:    ;;#ASMSTART696; GFX900-NEXT:    ; def v[0:1]697; GFX900-NEXT:    ;;#ASMEND698; GFX900-NEXT:    s_mov_b32 s4, 0x5040100699; GFX900-NEXT:    v_mov_b32_e32 v2, 0700; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4701; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]702; GFX900-NEXT:    s_waitcnt vmcnt(0)703; GFX900-NEXT:    s_setpc_b64 s[30:31]704;705; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_0:706; GFX90A:       ; %bb.0:707; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)708; GFX90A-NEXT:    ;;#ASMSTART709; GFX90A-NEXT:    ; def v[0:1]710; GFX90A-NEXT:    ;;#ASMEND711; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100712; GFX90A-NEXT:    v_mov_b32_e32 v2, 0713; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4714; GFX90A-NEXT:    global_store_dword v2, v0, 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_v2f16_v3f16__2_0:719; GFX942:       ; %bb.0:720; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX942-NEXT:    ;;#ASMSTART722; GFX942-NEXT:    ; def v[0:1]723; GFX942-NEXT:    ;;#ASMEND724; GFX942-NEXT:    s_mov_b32 s2, 0x5040100725; GFX942-NEXT:    v_mov_b32_e32 v2, 0726; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s2727; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]728; GFX942-NEXT:    s_waitcnt vmcnt(0)729; GFX942-NEXT:    s_setpc_b64 s[30:31]730  %vec0 = call <4 x half> asm "; def $0", "=v"()731  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>732  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 0>733  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4734  ret void735}736 737define void @v_shuffle_v2f16_v3f16__3_0(ptr addrspace(1) inreg %ptr) {738; GFX900-LABEL: v_shuffle_v2f16_v3f16__3_0:739; GFX900:       ; %bb.0:740; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX900-NEXT:    ;;#ASMSTART742; GFX900-NEXT:    ; def v[0:1]743; GFX900-NEXT:    ;;#ASMEND744; GFX900-NEXT:    v_mov_b32_e32 v2, 0745; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0746; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]747; GFX900-NEXT:    s_waitcnt vmcnt(0)748; GFX900-NEXT:    s_setpc_b64 s[30:31]749;750; GFX90A-LABEL: v_shuffle_v2f16_v3f16__3_0:751; GFX90A:       ; %bb.0:752; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)753; GFX90A-NEXT:    ;;#ASMSTART754; GFX90A-NEXT:    ; def v[0:1]755; GFX90A-NEXT:    ;;#ASMEND756; GFX90A-NEXT:    v_mov_b32_e32 v2, 0757; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0758; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]759; GFX90A-NEXT:    s_waitcnt vmcnt(0)760; GFX90A-NEXT:    s_setpc_b64 s[30:31]761;762; GFX942-LABEL: v_shuffle_v2f16_v3f16__3_0:763; GFX942:       ; %bb.0:764; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)765; GFX942-NEXT:    ;;#ASMSTART766; GFX942-NEXT:    ; def v[0:1]767; GFX942-NEXT:    ;;#ASMEND768; GFX942-NEXT:    v_mov_b32_e32 v2, 0769; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v0770; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]771; GFX942-NEXT:    s_waitcnt vmcnt(0)772; GFX942-NEXT:    s_setpc_b64 s[30:31]773  %vec0 = call <4 x half> asm "; def $0", "=v"()774  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>775  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 0>776  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4777  ret void778}779 780define void @v_shuffle_v2f16_v3f16__4_0(ptr addrspace(1) inreg %ptr) {781; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_0:782; GFX900:       ; %bb.0:783; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)784; GFX900-NEXT:    ;;#ASMSTART785; GFX900-NEXT:    ; def v[0:1]786; GFX900-NEXT:    ;;#ASMEND787; GFX900-NEXT:    v_mov_b32_e32 v3, 0788; GFX900-NEXT:    ;;#ASMSTART789; GFX900-NEXT:    ; def v[1:2]790; GFX900-NEXT:    ;;#ASMEND791; GFX900-NEXT:    v_alignbit_b32 v0, v0, v1, 16792; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]793; GFX900-NEXT:    s_waitcnt vmcnt(0)794; GFX900-NEXT:    s_setpc_b64 s[30:31]795;796; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_0:797; GFX90A:       ; %bb.0:798; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)799; GFX90A-NEXT:    ;;#ASMSTART800; GFX90A-NEXT:    ; def v[0:1]801; GFX90A-NEXT:    ;;#ASMEND802; GFX90A-NEXT:    v_mov_b32_e32 v4, 0803; GFX90A-NEXT:    ;;#ASMSTART804; GFX90A-NEXT:    ; def v[2:3]805; GFX90A-NEXT:    ;;#ASMEND806; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v2, 16807; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]808; GFX90A-NEXT:    s_waitcnt vmcnt(0)809; GFX90A-NEXT:    s_setpc_b64 s[30:31]810;811; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_0:812; GFX942:       ; %bb.0:813; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)814; GFX942-NEXT:    ;;#ASMSTART815; GFX942-NEXT:    ; def v[0:1]816; GFX942-NEXT:    ;;#ASMEND817; GFX942-NEXT:    v_mov_b32_e32 v4, 0818; GFX942-NEXT:    ;;#ASMSTART819; GFX942-NEXT:    ; def v[2:3]820; GFX942-NEXT:    ;;#ASMEND821; GFX942-NEXT:    s_nop 0822; GFX942-NEXT:    v_alignbit_b32 v0, v0, v2, 16823; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]824; GFX942-NEXT:    s_waitcnt vmcnt(0)825; GFX942-NEXT:    s_setpc_b64 s[30:31]826  %vec0 = call <4 x half> asm "; def $0", "=v"()827  %vec1 = call <4 x half> asm "; def $0", "=v"()828  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>829  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>830  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 0>831  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4832  ret void833}834 835define void @v_shuffle_v2f16_v3f16__u_1(ptr addrspace(1) inreg %ptr) {836; GFX900-LABEL: v_shuffle_v2f16_v3f16__u_1:837; GFX900:       ; %bb.0:838; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)839; GFX900-NEXT:    v_mov_b32_e32 v2, 0840; GFX900-NEXT:    ;;#ASMSTART841; GFX900-NEXT:    ; def v[0:1]842; GFX900-NEXT:    ;;#ASMEND843; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]844; GFX900-NEXT:    s_waitcnt vmcnt(0)845; GFX900-NEXT:    s_setpc_b64 s[30:31]846;847; GFX90A-LABEL: v_shuffle_v2f16_v3f16__u_1:848; GFX90A:       ; %bb.0:849; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX90A-NEXT:    v_mov_b32_e32 v2, 0851; GFX90A-NEXT:    ;;#ASMSTART852; GFX90A-NEXT:    ; def v[0:1]853; GFX90A-NEXT:    ;;#ASMEND854; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]855; GFX90A-NEXT:    s_waitcnt vmcnt(0)856; GFX90A-NEXT:    s_setpc_b64 s[30:31]857;858; GFX942-LABEL: v_shuffle_v2f16_v3f16__u_1:859; GFX942:       ; %bb.0:860; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)861; GFX942-NEXT:    v_mov_b32_e32 v2, 0862; GFX942-NEXT:    ;;#ASMSTART863; GFX942-NEXT:    ; def v[0:1]864; GFX942-NEXT:    ;;#ASMEND865; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]866; GFX942-NEXT:    s_waitcnt vmcnt(0)867; GFX942-NEXT:    s_setpc_b64 s[30:31]868  %vec0 = call <4 x half> asm "; def $0", "=v"()869  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>870  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 1>871  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4872  ret void873}874 875define void @v_shuffle_v2f16_v3f16__0_1(ptr addrspace(1) inreg %ptr) {876; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_1:877; GFX900:       ; %bb.0:878; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX900-NEXT:    v_mov_b32_e32 v2, 0880; GFX900-NEXT:    ;;#ASMSTART881; GFX900-NEXT:    ; def v[0:1]882; GFX900-NEXT:    ;;#ASMEND883; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]884; GFX900-NEXT:    s_waitcnt vmcnt(0)885; GFX900-NEXT:    s_setpc_b64 s[30:31]886;887; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_1:888; GFX90A:       ; %bb.0:889; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)890; GFX90A-NEXT:    v_mov_b32_e32 v2, 0891; GFX90A-NEXT:    ;;#ASMSTART892; GFX90A-NEXT:    ; def v[0:1]893; GFX90A-NEXT:    ;;#ASMEND894; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]895; GFX90A-NEXT:    s_waitcnt vmcnt(0)896; GFX90A-NEXT:    s_setpc_b64 s[30:31]897;898; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_1:899; GFX942:       ; %bb.0:900; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)901; GFX942-NEXT:    v_mov_b32_e32 v2, 0902; GFX942-NEXT:    ;;#ASMSTART903; GFX942-NEXT:    ; def v[0:1]904; GFX942-NEXT:    ;;#ASMEND905; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]906; GFX942-NEXT:    s_waitcnt vmcnt(0)907; GFX942-NEXT:    s_setpc_b64 s[30:31]908  %vec0 = call <4 x half> asm "; def $0", "=v"()909  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>910  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 1>911  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4912  ret void913}914 915define void @v_shuffle_v2f16_v3f16__1_1(ptr addrspace(1) inreg %ptr) {916; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_1:917; GFX900:       ; %bb.0:918; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)919; GFX900-NEXT:    ;;#ASMSTART920; GFX900-NEXT:    ; def v[0:1]921; GFX900-NEXT:    ;;#ASMEND922; GFX900-NEXT:    s_mov_b32 s4, 0x7060302923; GFX900-NEXT:    v_mov_b32_e32 v2, 0924; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4925; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]926; GFX900-NEXT:    s_waitcnt vmcnt(0)927; GFX900-NEXT:    s_setpc_b64 s[30:31]928;929; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_1:930; GFX90A:       ; %bb.0:931; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)932; GFX90A-NEXT:    ;;#ASMSTART933; GFX90A-NEXT:    ; def v[0:1]934; GFX90A-NEXT:    ;;#ASMEND935; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302936; GFX90A-NEXT:    v_mov_b32_e32 v2, 0937; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4938; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]939; GFX90A-NEXT:    s_waitcnt vmcnt(0)940; GFX90A-NEXT:    s_setpc_b64 s[30:31]941;942; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_1:943; GFX942:       ; %bb.0:944; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)945; GFX942-NEXT:    ;;#ASMSTART946; GFX942-NEXT:    ; def v[0:1]947; GFX942-NEXT:    ;;#ASMEND948; GFX942-NEXT:    s_mov_b32 s2, 0x7060302949; GFX942-NEXT:    v_mov_b32_e32 v2, 0950; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s2951; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]952; GFX942-NEXT:    s_waitcnt vmcnt(0)953; GFX942-NEXT:    s_setpc_b64 s[30:31]954  %vec0 = call <4 x half> asm "; def $0", "=v"()955  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>956  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 1>957  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4958  ret void959}960 961define void @v_shuffle_v2f16_v3f16__2_1(ptr addrspace(1) inreg %ptr) {962; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_1:963; GFX900:       ; %bb.0:964; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GFX900-NEXT:    ;;#ASMSTART966; GFX900-NEXT:    ; def v[0:1]967; GFX900-NEXT:    ;;#ASMEND968; GFX900-NEXT:    s_mov_b32 s4, 0xffff969; GFX900-NEXT:    v_mov_b32_e32 v2, 0970; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v0971; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]972; GFX900-NEXT:    s_waitcnt vmcnt(0)973; GFX900-NEXT:    s_setpc_b64 s[30:31]974;975; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_1:976; GFX90A:       ; %bb.0:977; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)978; GFX90A-NEXT:    ;;#ASMSTART979; GFX90A-NEXT:    ; def v[0:1]980; GFX90A-NEXT:    ;;#ASMEND981; GFX90A-NEXT:    s_mov_b32 s4, 0xffff982; GFX90A-NEXT:    v_mov_b32_e32 v2, 0983; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v0984; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]985; GFX90A-NEXT:    s_waitcnt vmcnt(0)986; GFX90A-NEXT:    s_setpc_b64 s[30:31]987;988; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_1:989; GFX942:       ; %bb.0:990; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)991; GFX942-NEXT:    ;;#ASMSTART992; GFX942-NEXT:    ; def v[0:1]993; GFX942-NEXT:    ;;#ASMEND994; GFX942-NEXT:    s_mov_b32 s2, 0xffff995; GFX942-NEXT:    v_mov_b32_e32 v2, 0996; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v0997; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]998; GFX942-NEXT:    s_waitcnt vmcnt(0)999; GFX942-NEXT:    s_setpc_b64 s[30:31]1000  %vec0 = call <4 x half> asm "; def $0", "=v"()1001  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1002  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 1>1003  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41004  ret void1005}1006 1007define void @v_shuffle_v2f16_v3f16__3_1(ptr addrspace(1) inreg %ptr) {1008; GFX900-LABEL: v_shuffle_v2f16_v3f16__3_1:1009; GFX900:       ; %bb.0:1010; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1011; GFX900-NEXT:    v_mov_b32_e32 v2, 01012; GFX900-NEXT:    ;;#ASMSTART1013; GFX900-NEXT:    ; def v[0:1]1014; GFX900-NEXT:    ;;#ASMEND1015; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1016; GFX900-NEXT:    s_waitcnt vmcnt(0)1017; GFX900-NEXT:    s_setpc_b64 s[30:31]1018;1019; GFX90A-LABEL: v_shuffle_v2f16_v3f16__3_1:1020; GFX90A:       ; %bb.0:1021; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1022; GFX90A-NEXT:    v_mov_b32_e32 v2, 01023; GFX90A-NEXT:    ;;#ASMSTART1024; GFX90A-NEXT:    ; def v[0:1]1025; GFX90A-NEXT:    ;;#ASMEND1026; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1027; GFX90A-NEXT:    s_waitcnt vmcnt(0)1028; GFX90A-NEXT:    s_setpc_b64 s[30:31]1029;1030; GFX942-LABEL: v_shuffle_v2f16_v3f16__3_1:1031; GFX942:       ; %bb.0:1032; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1033; GFX942-NEXT:    v_mov_b32_e32 v2, 01034; GFX942-NEXT:    ;;#ASMSTART1035; GFX942-NEXT:    ; def v[0:1]1036; GFX942-NEXT:    ;;#ASMEND1037; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1038; GFX942-NEXT:    s_waitcnt vmcnt(0)1039; GFX942-NEXT:    s_setpc_b64 s[30:31]1040  %vec0 = call <4 x half> asm "; def $0", "=v"()1041  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1042  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 1>1043  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41044  ret void1045}1046 1047define void @v_shuffle_v2f16_v3f16__4_1(ptr addrspace(1) inreg %ptr) {1048; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_1:1049; GFX900:       ; %bb.0:1050; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1051; GFX900-NEXT:    ;;#ASMSTART1052; GFX900-NEXT:    ; def v[0:1]1053; GFX900-NEXT:    ;;#ASMEND1054; GFX900-NEXT:    s_mov_b32 s4, 0x70603021055; GFX900-NEXT:    v_mov_b32_e32 v3, 01056; GFX900-NEXT:    ;;#ASMSTART1057; GFX900-NEXT:    ; def v[1:2]1058; GFX900-NEXT:    ;;#ASMEND1059; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s41060; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1061; GFX900-NEXT:    s_waitcnt vmcnt(0)1062; GFX900-NEXT:    s_setpc_b64 s[30:31]1063;1064; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_1:1065; GFX90A:       ; %bb.0:1066; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX90A-NEXT:    ;;#ASMSTART1068; GFX90A-NEXT:    ; def v[0:1]1069; GFX90A-NEXT:    ;;#ASMEND1070; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021071; GFX90A-NEXT:    v_mov_b32_e32 v4, 01072; GFX90A-NEXT:    ;;#ASMSTART1073; GFX90A-NEXT:    ; def v[2:3]1074; GFX90A-NEXT:    ;;#ASMEND1075; GFX90A-NEXT:    v_perm_b32 v0, v0, v2, s41076; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1077; GFX90A-NEXT:    s_waitcnt vmcnt(0)1078; GFX90A-NEXT:    s_setpc_b64 s[30:31]1079;1080; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_1:1081; GFX942:       ; %bb.0:1082; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1083; GFX942-NEXT:    ;;#ASMSTART1084; GFX942-NEXT:    ; def v[0:1]1085; GFX942-NEXT:    ;;#ASMEND1086; GFX942-NEXT:    s_mov_b32 s2, 0x70603021087; GFX942-NEXT:    v_mov_b32_e32 v4, 01088; GFX942-NEXT:    ;;#ASMSTART1089; GFX942-NEXT:    ; def v[2:3]1090; GFX942-NEXT:    ;;#ASMEND1091; GFX942-NEXT:    s_nop 01092; GFX942-NEXT:    v_perm_b32 v0, v0, v2, s21093; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1094; GFX942-NEXT:    s_waitcnt vmcnt(0)1095; GFX942-NEXT:    s_setpc_b64 s[30:31]1096  %vec0 = call <4 x half> asm "; def $0", "=v"()1097  %vec1 = call <4 x half> asm "; def $0", "=v"()1098  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1099  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1100  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 1>1101  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41102  ret void1103}1104 1105define void @v_shuffle_v2f16_v3f16__u_2(ptr addrspace(1) inreg %ptr) {1106; GFX900-LABEL: v_shuffle_v2f16_v3f16__u_2:1107; GFX900:       ; %bb.0:1108; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1109; GFX900-NEXT:    ;;#ASMSTART1110; GFX900-NEXT:    ; def v[0:1]1111; GFX900-NEXT:    ;;#ASMEND1112; GFX900-NEXT:    v_mov_b32_e32 v2, 01113; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v11114; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1115; GFX900-NEXT:    s_waitcnt vmcnt(0)1116; GFX900-NEXT:    s_setpc_b64 s[30:31]1117;1118; GFX90A-LABEL: v_shuffle_v2f16_v3f16__u_2:1119; GFX90A:       ; %bb.0:1120; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1121; GFX90A-NEXT:    ;;#ASMSTART1122; GFX90A-NEXT:    ; def v[0:1]1123; GFX90A-NEXT:    ;;#ASMEND1124; GFX90A-NEXT:    v_mov_b32_e32 v2, 01125; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v11126; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1127; GFX90A-NEXT:    s_waitcnt vmcnt(0)1128; GFX90A-NEXT:    s_setpc_b64 s[30:31]1129;1130; GFX942-LABEL: v_shuffle_v2f16_v3f16__u_2:1131; GFX942:       ; %bb.0:1132; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1133; GFX942-NEXT:    ;;#ASMSTART1134; GFX942-NEXT:    ; def v[0:1]1135; GFX942-NEXT:    ;;#ASMEND1136; GFX942-NEXT:    v_mov_b32_e32 v2, 01137; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v11138; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1139; GFX942-NEXT:    s_waitcnt vmcnt(0)1140; GFX942-NEXT:    s_setpc_b64 s[30:31]1141  %vec0 = call <4 x half> asm "; def $0", "=v"()1142  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1143  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 2>1144  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41145  ret void1146}1147 1148define void @v_shuffle_v2f16_v3f16__0_2(ptr addrspace(1) inreg %ptr) {1149; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_2:1150; GFX900:       ; %bb.0:1151; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1152; GFX900-NEXT:    ;;#ASMSTART1153; GFX900-NEXT:    ; def v[0:1]1154; GFX900-NEXT:    ;;#ASMEND1155; GFX900-NEXT:    s_mov_b32 s4, 0x50401001156; GFX900-NEXT:    v_mov_b32_e32 v2, 01157; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s41158; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1159; GFX900-NEXT:    s_waitcnt vmcnt(0)1160; GFX900-NEXT:    s_setpc_b64 s[30:31]1161;1162; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_2:1163; GFX90A:       ; %bb.0:1164; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1165; GFX90A-NEXT:    ;;#ASMSTART1166; GFX90A-NEXT:    ; def v[0:1]1167; GFX90A-NEXT:    ;;#ASMEND1168; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001169; GFX90A-NEXT:    v_mov_b32_e32 v2, 01170; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s41171; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1172; GFX90A-NEXT:    s_waitcnt vmcnt(0)1173; GFX90A-NEXT:    s_setpc_b64 s[30:31]1174;1175; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_2:1176; GFX942:       ; %bb.0:1177; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1178; GFX942-NEXT:    ;;#ASMSTART1179; GFX942-NEXT:    ; def v[0:1]1180; GFX942-NEXT:    ;;#ASMEND1181; GFX942-NEXT:    s_mov_b32 s2, 0x50401001182; GFX942-NEXT:    v_mov_b32_e32 v2, 01183; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s21184; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1185; GFX942-NEXT:    s_waitcnt vmcnt(0)1186; GFX942-NEXT:    s_setpc_b64 s[30:31]1187  %vec0 = call <4 x half> asm "; def $0", "=v"()1188  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1189  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 2>1190  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41191  ret void1192}1193 1194define void @v_shuffle_v2f16_v3f16__1_2(ptr addrspace(1) inreg %ptr) {1195; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_2:1196; GFX900:       ; %bb.0:1197; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1198; GFX900-NEXT:    ;;#ASMSTART1199; GFX900-NEXT:    ; def v[0:1]1200; GFX900-NEXT:    ;;#ASMEND1201; GFX900-NEXT:    v_mov_b32_e32 v2, 01202; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 161203; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1204; GFX900-NEXT:    s_waitcnt vmcnt(0)1205; GFX900-NEXT:    s_setpc_b64 s[30:31]1206;1207; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_2:1208; GFX90A:       ; %bb.0:1209; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1210; GFX90A-NEXT:    ;;#ASMSTART1211; GFX90A-NEXT:    ; def v[0:1]1212; GFX90A-NEXT:    ;;#ASMEND1213; GFX90A-NEXT:    v_mov_b32_e32 v2, 01214; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 161215; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1216; GFX90A-NEXT:    s_waitcnt vmcnt(0)1217; GFX90A-NEXT:    s_setpc_b64 s[30:31]1218;1219; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_2:1220; GFX942:       ; %bb.0:1221; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1222; GFX942-NEXT:    ;;#ASMSTART1223; GFX942-NEXT:    ; def v[0:1]1224; GFX942-NEXT:    ;;#ASMEND1225; GFX942-NEXT:    v_mov_b32_e32 v2, 01226; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 161227; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1228; GFX942-NEXT:    s_waitcnt vmcnt(0)1229; GFX942-NEXT:    s_setpc_b64 s[30:31]1230  %vec0 = call <4 x half> asm "; def $0", "=v"()1231  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1232  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 2>1233  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41234  ret void1235}1236 1237define void @v_shuffle_v2f16_v3f16__2_2(ptr addrspace(1) inreg %ptr) {1238; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_2:1239; GFX900:       ; %bb.0:1240; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1241; GFX900-NEXT:    ;;#ASMSTART1242; GFX900-NEXT:    ; def v[0:1]1243; GFX900-NEXT:    ;;#ASMEND1244; GFX900-NEXT:    s_mov_b32 s4, 0x50401001245; GFX900-NEXT:    v_mov_b32_e32 v2, 01246; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s41247; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1248; GFX900-NEXT:    s_waitcnt vmcnt(0)1249; GFX900-NEXT:    s_setpc_b64 s[30:31]1250;1251; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_2:1252; GFX90A:       ; %bb.0:1253; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1254; GFX90A-NEXT:    ;;#ASMSTART1255; GFX90A-NEXT:    ; def v[0:1]1256; GFX90A-NEXT:    ;;#ASMEND1257; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001258; GFX90A-NEXT:    v_mov_b32_e32 v2, 01259; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s41260; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1261; GFX90A-NEXT:    s_waitcnt vmcnt(0)1262; GFX90A-NEXT:    s_setpc_b64 s[30:31]1263;1264; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_2:1265; GFX942:       ; %bb.0:1266; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1267; GFX942-NEXT:    ;;#ASMSTART1268; GFX942-NEXT:    ; def v[0:1]1269; GFX942-NEXT:    ;;#ASMEND1270; GFX942-NEXT:    s_mov_b32 s2, 0x50401001271; GFX942-NEXT:    v_mov_b32_e32 v2, 01272; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s21273; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1274; GFX942-NEXT:    s_waitcnt vmcnt(0)1275; GFX942-NEXT:    s_setpc_b64 s[30:31]1276  %vec0 = call <4 x half> asm "; def $0", "=v"()1277  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1278  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 2>1279  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41280  ret void1281}1282 1283define void @v_shuffle_v2f16_v3f16__3_2(ptr addrspace(1) inreg %ptr) {1284; GFX900-LABEL: v_shuffle_v2f16_v3f16__3_2:1285; GFX900:       ; %bb.0:1286; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1287; GFX900-NEXT:    ;;#ASMSTART1288; GFX900-NEXT:    ; def v[0:1]1289; GFX900-NEXT:    ;;#ASMEND1290; GFX900-NEXT:    v_mov_b32_e32 v2, 01291; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v11292; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1293; GFX900-NEXT:    s_waitcnt vmcnt(0)1294; GFX900-NEXT:    s_setpc_b64 s[30:31]1295;1296; GFX90A-LABEL: v_shuffle_v2f16_v3f16__3_2:1297; GFX90A:       ; %bb.0:1298; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1299; GFX90A-NEXT:    ;;#ASMSTART1300; GFX90A-NEXT:    ; def v[0:1]1301; GFX90A-NEXT:    ;;#ASMEND1302; GFX90A-NEXT:    v_mov_b32_e32 v2, 01303; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v11304; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1305; GFX90A-NEXT:    s_waitcnt vmcnt(0)1306; GFX90A-NEXT:    s_setpc_b64 s[30:31]1307;1308; GFX942-LABEL: v_shuffle_v2f16_v3f16__3_2:1309; GFX942:       ; %bb.0:1310; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1311; GFX942-NEXT:    ;;#ASMSTART1312; GFX942-NEXT:    ; def v[0:1]1313; GFX942-NEXT:    ;;#ASMEND1314; GFX942-NEXT:    v_mov_b32_e32 v2, 01315; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v11316; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1317; GFX942-NEXT:    s_waitcnt vmcnt(0)1318; GFX942-NEXT:    s_setpc_b64 s[30:31]1319  %vec0 = call <4 x half> asm "; def $0", "=v"()1320  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1321  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 2>1322  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41323  ret void1324}1325 1326define void @v_shuffle_v2f16_v3f16__4_2(ptr addrspace(1) inreg %ptr) {1327; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_2:1328; GFX900:       ; %bb.0:1329; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1330; GFX900-NEXT:    ;;#ASMSTART1331; GFX900-NEXT:    ; def v[0:1]1332; GFX900-NEXT:    ;;#ASMEND1333; GFX900-NEXT:    v_mov_b32_e32 v4, 01334; GFX900-NEXT:    ;;#ASMSTART1335; GFX900-NEXT:    ; def v[2:3]1336; GFX900-NEXT:    ;;#ASMEND1337; GFX900-NEXT:    v_alignbit_b32 v0, v1, v2, 161338; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]1339; GFX900-NEXT:    s_waitcnt vmcnt(0)1340; GFX900-NEXT:    s_setpc_b64 s[30:31]1341;1342; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_2:1343; GFX90A:       ; %bb.0:1344; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX90A-NEXT:    ;;#ASMSTART1346; GFX90A-NEXT:    ; def v[0:1]1347; GFX90A-NEXT:    ;;#ASMEND1348; GFX90A-NEXT:    v_mov_b32_e32 v4, 01349; GFX90A-NEXT:    ;;#ASMSTART1350; GFX90A-NEXT:    ; def v[2:3]1351; GFX90A-NEXT:    ;;#ASMEND1352; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v2, 161353; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1354; GFX90A-NEXT:    s_waitcnt vmcnt(0)1355; GFX90A-NEXT:    s_setpc_b64 s[30:31]1356;1357; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_2:1358; GFX942:       ; %bb.0:1359; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1360; GFX942-NEXT:    ;;#ASMSTART1361; GFX942-NEXT:    ; def v[0:1]1362; GFX942-NEXT:    ;;#ASMEND1363; GFX942-NEXT:    v_mov_b32_e32 v4, 01364; GFX942-NEXT:    ;;#ASMSTART1365; GFX942-NEXT:    ; def v[2:3]1366; GFX942-NEXT:    ;;#ASMEND1367; GFX942-NEXT:    s_nop 01368; GFX942-NEXT:    v_alignbit_b32 v0, v1, v2, 161369; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1370; GFX942-NEXT:    s_waitcnt vmcnt(0)1371; GFX942-NEXT:    s_setpc_b64 s[30:31]1372  %vec0 = call <4 x half> asm "; def $0", "=v"()1373  %vec1 = call <4 x half> asm "; def $0", "=v"()1374  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1375  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1376  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 2>1377  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41378  ret void1379}1380 1381define void @v_shuffle_v2f16_v3f16__u_3(ptr addrspace(1) inreg %ptr) {1382; GFX9-LABEL: v_shuffle_v2f16_v3f16__u_3:1383; GFX9:       ; %bb.0:1384; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX9-NEXT:    s_setpc_b64 s[30:31]1386  %vec0 = call <4 x half> asm "; def $0", "=v"()1387  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1388  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 3>1389  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41390  ret void1391}1392 1393define void @v_shuffle_v2f16_v3f16__0_3(ptr addrspace(1) inreg %ptr) {1394; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_3:1395; GFX900:       ; %bb.0:1396; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1397; GFX900-NEXT:    v_mov_b32_e32 v2, 01398; GFX900-NEXT:    ;;#ASMSTART1399; GFX900-NEXT:    ; def v[0:1]1400; GFX900-NEXT:    ;;#ASMEND1401; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1402; GFX900-NEXT:    s_waitcnt vmcnt(0)1403; GFX900-NEXT:    s_setpc_b64 s[30:31]1404;1405; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_3:1406; GFX90A:       ; %bb.0:1407; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1408; GFX90A-NEXT:    v_mov_b32_e32 v2, 01409; GFX90A-NEXT:    ;;#ASMSTART1410; GFX90A-NEXT:    ; def v[0:1]1411; GFX90A-NEXT:    ;;#ASMEND1412; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1413; GFX90A-NEXT:    s_waitcnt vmcnt(0)1414; GFX90A-NEXT:    s_setpc_b64 s[30:31]1415;1416; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_3:1417; GFX942:       ; %bb.0:1418; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1419; GFX942-NEXT:    v_mov_b32_e32 v2, 01420; GFX942-NEXT:    ;;#ASMSTART1421; GFX942-NEXT:    ; def v[0:1]1422; GFX942-NEXT:    ;;#ASMEND1423; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1424; GFX942-NEXT:    s_waitcnt vmcnt(0)1425; GFX942-NEXT:    s_setpc_b64 s[30:31]1426  %vec0 = call <4 x half> asm "; def $0", "=v"()1427  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1428  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 3>1429  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41430  ret void1431}1432 1433define void @v_shuffle_v2f16_v3f16__1_3(ptr addrspace(1) inreg %ptr) {1434; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_3:1435; GFX900:       ; %bb.0:1436; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1437; GFX900-NEXT:    ;;#ASMSTART1438; GFX900-NEXT:    ; def v[0:1]1439; GFX900-NEXT:    ;;#ASMEND1440; GFX900-NEXT:    v_mov_b32_e32 v2, 01441; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 161442; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1443; GFX900-NEXT:    s_waitcnt vmcnt(0)1444; GFX900-NEXT:    s_setpc_b64 s[30:31]1445;1446; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_3:1447; GFX90A:       ; %bb.0:1448; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1449; GFX90A-NEXT:    ;;#ASMSTART1450; GFX90A-NEXT:    ; def v[0:1]1451; GFX90A-NEXT:    ;;#ASMEND1452; GFX90A-NEXT:    v_mov_b32_e32 v2, 01453; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 161454; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1455; GFX90A-NEXT:    s_waitcnt vmcnt(0)1456; GFX90A-NEXT:    s_setpc_b64 s[30:31]1457;1458; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_3:1459; GFX942:       ; %bb.0:1460; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1461; GFX942-NEXT:    ;;#ASMSTART1462; GFX942-NEXT:    ; def v[0:1]1463; GFX942-NEXT:    ;;#ASMEND1464; GFX942-NEXT:    v_mov_b32_e32 v2, 01465; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 161466; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1467; GFX942-NEXT:    s_waitcnt vmcnt(0)1468; GFX942-NEXT:    s_setpc_b64 s[30:31]1469  %vec0 = call <4 x half> asm "; def $0", "=v"()1470  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1471  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 3>1472  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41473  ret void1474}1475 1476define void @v_shuffle_v2f16_v3f16__2_3(ptr addrspace(1) inreg %ptr) {1477; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_3:1478; GFX900:       ; %bb.0:1479; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1480; GFX900-NEXT:    v_mov_b32_e32 v2, 01481; GFX900-NEXT:    ;;#ASMSTART1482; GFX900-NEXT:    ; def v[0:1]1483; GFX900-NEXT:    ;;#ASMEND1484; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1485; GFX900-NEXT:    s_waitcnt vmcnt(0)1486; GFX900-NEXT:    s_setpc_b64 s[30:31]1487;1488; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_3:1489; GFX90A:       ; %bb.0:1490; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1491; GFX90A-NEXT:    v_mov_b32_e32 v2, 01492; GFX90A-NEXT:    ;;#ASMSTART1493; GFX90A-NEXT:    ; def v[0:1]1494; GFX90A-NEXT:    ;;#ASMEND1495; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1496; GFX90A-NEXT:    s_waitcnt vmcnt(0)1497; GFX90A-NEXT:    s_setpc_b64 s[30:31]1498;1499; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_3:1500; GFX942:       ; %bb.0:1501; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1502; GFX942-NEXT:    v_mov_b32_e32 v2, 01503; GFX942-NEXT:    ;;#ASMSTART1504; GFX942-NEXT:    ; def v[0:1]1505; GFX942-NEXT:    ;;#ASMEND1506; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1507; GFX942-NEXT:    s_waitcnt vmcnt(0)1508; GFX942-NEXT:    s_setpc_b64 s[30:31]1509  %vec0 = call <4 x half> asm "; def $0", "=v"()1510  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1511  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 3>1512  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41513  ret void1514}1515 1516define void @v_shuffle_v2f16_v3f16__3_3(ptr addrspace(1) inreg %ptr) {1517; GFX9-LABEL: v_shuffle_v2f16_v3f16__3_3:1518; GFX9:       ; %bb.0:1519; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1520; GFX9-NEXT:    s_setpc_b64 s[30:31]1521  %vec0 = call <4 x half> asm "; def $0", "=v"()1522  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1523  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 3>1524  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41525  ret void1526}1527 1528define void @v_shuffle_v2f16_v3f16__4_3(ptr addrspace(1) inreg %ptr) {1529; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_3:1530; GFX900:       ; %bb.0:1531; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX900-NEXT:    ;;#ASMSTART1533; GFX900-NEXT:    ; def v[0:1]1534; GFX900-NEXT:    ;;#ASMEND1535; GFX900-NEXT:    v_mov_b32_e32 v2, 01536; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 161537; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1538; GFX900-NEXT:    s_waitcnt vmcnt(0)1539; GFX900-NEXT:    s_setpc_b64 s[30:31]1540;1541; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_3:1542; GFX90A:       ; %bb.0:1543; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; GFX90A-NEXT:    ;;#ASMSTART1545; GFX90A-NEXT:    ; def v[0:1]1546; GFX90A-NEXT:    ;;#ASMEND1547; GFX90A-NEXT:    v_mov_b32_e32 v2, 01548; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 161549; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1550; GFX90A-NEXT:    s_waitcnt vmcnt(0)1551; GFX90A-NEXT:    s_setpc_b64 s[30:31]1552;1553; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_3:1554; GFX942:       ; %bb.0:1555; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1556; GFX942-NEXT:    ;;#ASMSTART1557; GFX942-NEXT:    ; def v[0:1]1558; GFX942-NEXT:    ;;#ASMEND1559; GFX942-NEXT:    v_mov_b32_e32 v2, 01560; GFX942-NEXT:    v_alignbit_b32 v0, v0, v0, 161561; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1562; GFX942-NEXT:    s_waitcnt vmcnt(0)1563; GFX942-NEXT:    s_setpc_b64 s[30:31]1564  %vec0 = call <4 x half> asm "; def $0", "=v"()1565  %vec1 = call <4 x half> asm "; def $0", "=v"()1566  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1567  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1568  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 3>1569  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41570  ret void1571}1572 1573define void @v_shuffle_v2f16_v3f16__u_4(ptr addrspace(1) inreg %ptr) {1574; GFX900-LABEL: v_shuffle_v2f16_v3f16__u_4:1575; GFX900:       ; %bb.0:1576; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX900-NEXT:    v_mov_b32_e32 v2, 01578; GFX900-NEXT:    ;;#ASMSTART1579; GFX900-NEXT:    ; def v[0:1]1580; GFX900-NEXT:    ;;#ASMEND1581; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1582; GFX900-NEXT:    s_waitcnt vmcnt(0)1583; GFX900-NEXT:    s_setpc_b64 s[30:31]1584;1585; GFX90A-LABEL: v_shuffle_v2f16_v3f16__u_4:1586; GFX90A:       ; %bb.0:1587; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1588; GFX90A-NEXT:    v_mov_b32_e32 v2, 01589; GFX90A-NEXT:    ;;#ASMSTART1590; GFX90A-NEXT:    ; def v[0:1]1591; GFX90A-NEXT:    ;;#ASMEND1592; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1593; GFX90A-NEXT:    s_waitcnt vmcnt(0)1594; GFX90A-NEXT:    s_setpc_b64 s[30:31]1595;1596; GFX942-LABEL: v_shuffle_v2f16_v3f16__u_4:1597; GFX942:       ; %bb.0:1598; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1599; GFX942-NEXT:    v_mov_b32_e32 v2, 01600; GFX942-NEXT:    ;;#ASMSTART1601; GFX942-NEXT:    ; def v[0:1]1602; GFX942-NEXT:    ;;#ASMEND1603; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1604; GFX942-NEXT:    s_waitcnt vmcnt(0)1605; GFX942-NEXT:    s_setpc_b64 s[30:31]1606  %vec0 = call <4 x half> asm "; def $0", "=v"()1607  %vec1 = call <4 x half> asm "; def $0", "=v"()1608  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1609  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1610  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 poison, i32 4>1611  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41612  ret void1613}1614 1615define void @v_shuffle_v2f16_v3f16__0_4(ptr addrspace(1) inreg %ptr) {1616; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_4:1617; GFX900:       ; %bb.0:1618; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1619; GFX900-NEXT:    ;;#ASMSTART1620; GFX900-NEXT:    ; def v[0:1]1621; GFX900-NEXT:    ;;#ASMEND1622; GFX900-NEXT:    s_mov_b32 s4, 0xffff1623; GFX900-NEXT:    v_mov_b32_e32 v3, 01624; GFX900-NEXT:    ;;#ASMSTART1625; GFX900-NEXT:    ; def v[1:2]1626; GFX900-NEXT:    ;;#ASMEND1627; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v11628; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1629; GFX900-NEXT:    s_waitcnt vmcnt(0)1630; GFX900-NEXT:    s_setpc_b64 s[30:31]1631;1632; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_4:1633; GFX90A:       ; %bb.0:1634; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1635; GFX90A-NEXT:    ;;#ASMSTART1636; GFX90A-NEXT:    ; def v[0:1]1637; GFX90A-NEXT:    ;;#ASMEND1638; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1639; GFX90A-NEXT:    v_mov_b32_e32 v4, 01640; GFX90A-NEXT:    ;;#ASMSTART1641; GFX90A-NEXT:    ; def v[2:3]1642; GFX90A-NEXT:    ;;#ASMEND1643; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v21644; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1645; GFX90A-NEXT:    s_waitcnt vmcnt(0)1646; GFX90A-NEXT:    s_setpc_b64 s[30:31]1647;1648; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_4:1649; GFX942:       ; %bb.0:1650; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1651; GFX942-NEXT:    ;;#ASMSTART1652; GFX942-NEXT:    ; def v[0:1]1653; GFX942-NEXT:    ;;#ASMEND1654; GFX942-NEXT:    s_mov_b32 s2, 0xffff1655; GFX942-NEXT:    v_mov_b32_e32 v4, 01656; GFX942-NEXT:    ;;#ASMSTART1657; GFX942-NEXT:    ; def v[2:3]1658; GFX942-NEXT:    ;;#ASMEND1659; GFX942-NEXT:    s_nop 01660; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v21661; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1662; GFX942-NEXT:    s_waitcnt vmcnt(0)1663; GFX942-NEXT:    s_setpc_b64 s[30:31]1664  %vec0 = call <4 x half> asm "; def $0", "=v"()1665  %vec1 = call <4 x half> asm "; def $0", "=v"()1666  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1667  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1668  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 0, i32 4>1669  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41670  ret void1671}1672 1673define void @v_shuffle_v2f16_v3f16__1_4(ptr addrspace(1) inreg %ptr) {1674; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_4:1675; GFX900:       ; %bb.0:1676; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1677; GFX900-NEXT:    ;;#ASMSTART1678; GFX900-NEXT:    ; def v[0:1]1679; GFX900-NEXT:    ;;#ASMEND1680; GFX900-NEXT:    s_mov_b32 s4, 0x70603021681; GFX900-NEXT:    v_mov_b32_e32 v3, 01682; GFX900-NEXT:    ;;#ASMSTART1683; GFX900-NEXT:    ; def v[1:2]1684; GFX900-NEXT:    ;;#ASMEND1685; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s41686; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1687; GFX900-NEXT:    s_waitcnt vmcnt(0)1688; GFX900-NEXT:    s_setpc_b64 s[30:31]1689;1690; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_4:1691; GFX90A:       ; %bb.0:1692; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1693; GFX90A-NEXT:    ;;#ASMSTART1694; GFX90A-NEXT:    ; def v[0:1]1695; GFX90A-NEXT:    ;;#ASMEND1696; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021697; GFX90A-NEXT:    v_mov_b32_e32 v4, 01698; GFX90A-NEXT:    ;;#ASMSTART1699; GFX90A-NEXT:    ; def v[2:3]1700; GFX90A-NEXT:    ;;#ASMEND1701; GFX90A-NEXT:    v_perm_b32 v0, v2, v0, s41702; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1703; GFX90A-NEXT:    s_waitcnt vmcnt(0)1704; GFX90A-NEXT:    s_setpc_b64 s[30:31]1705;1706; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_4:1707; GFX942:       ; %bb.0:1708; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1709; GFX942-NEXT:    ;;#ASMSTART1710; GFX942-NEXT:    ; def v[0:1]1711; GFX942-NEXT:    ;;#ASMEND1712; GFX942-NEXT:    s_mov_b32 s2, 0x70603021713; GFX942-NEXT:    v_mov_b32_e32 v4, 01714; GFX942-NEXT:    ;;#ASMSTART1715; GFX942-NEXT:    ; def v[2:3]1716; GFX942-NEXT:    ;;#ASMEND1717; GFX942-NEXT:    s_nop 01718; GFX942-NEXT:    v_perm_b32 v0, v2, v0, s21719; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1720; GFX942-NEXT:    s_waitcnt vmcnt(0)1721; GFX942-NEXT:    s_setpc_b64 s[30:31]1722  %vec0 = call <4 x half> asm "; def $0", "=v"()1723  %vec1 = call <4 x half> asm "; def $0", "=v"()1724  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1725  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1726  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 1, i32 4>1727  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41728  ret void1729}1730 1731define void @v_shuffle_v2f16_v3f16__2_4(ptr addrspace(1) inreg %ptr) {1732; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_4:1733; GFX900:       ; %bb.0:1734; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1735; GFX900-NEXT:    ;;#ASMSTART1736; GFX900-NEXT:    ; def v[0:1]1737; GFX900-NEXT:    ;;#ASMEND1738; GFX900-NEXT:    s_mov_b32 s4, 0xffff1739; GFX900-NEXT:    v_mov_b32_e32 v4, 01740; GFX900-NEXT:    ;;#ASMSTART1741; GFX900-NEXT:    ; def v[2:3]1742; GFX900-NEXT:    ;;#ASMEND1743; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v21744; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]1745; GFX900-NEXT:    s_waitcnt vmcnt(0)1746; GFX900-NEXT:    s_setpc_b64 s[30:31]1747;1748; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_4:1749; GFX90A:       ; %bb.0:1750; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1751; GFX90A-NEXT:    ;;#ASMSTART1752; GFX90A-NEXT:    ; def v[0:1]1753; GFX90A-NEXT:    ;;#ASMEND1754; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1755; GFX90A-NEXT:    v_mov_b32_e32 v4, 01756; GFX90A-NEXT:    ;;#ASMSTART1757; GFX90A-NEXT:    ; def v[2:3]1758; GFX90A-NEXT:    ;;#ASMEND1759; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v21760; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1761; GFX90A-NEXT:    s_waitcnt vmcnt(0)1762; GFX90A-NEXT:    s_setpc_b64 s[30:31]1763;1764; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_4:1765; GFX942:       ; %bb.0:1766; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1767; GFX942-NEXT:    ;;#ASMSTART1768; GFX942-NEXT:    ; def v[0:1]1769; GFX942-NEXT:    ;;#ASMEND1770; GFX942-NEXT:    s_mov_b32 s2, 0xffff1771; GFX942-NEXT:    v_mov_b32_e32 v4, 01772; GFX942-NEXT:    ;;#ASMSTART1773; GFX942-NEXT:    ; def v[2:3]1774; GFX942-NEXT:    ;;#ASMEND1775; GFX942-NEXT:    s_nop 01776; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v21777; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1778; GFX942-NEXT:    s_waitcnt vmcnt(0)1779; GFX942-NEXT:    s_setpc_b64 s[30:31]1780  %vec0 = call <4 x half> asm "; def $0", "=v"()1781  %vec1 = call <4 x half> asm "; def $0", "=v"()1782  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1783  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1784  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 2, i32 4>1785  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41786  ret void1787}1788 1789define void @v_shuffle_v2f16_v3f16__3_4(ptr addrspace(1) inreg %ptr) {1790; GFX900-LABEL: v_shuffle_v2f16_v3f16__3_4:1791; GFX900:       ; %bb.0:1792; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1793; GFX900-NEXT:    v_mov_b32_e32 v2, 01794; GFX900-NEXT:    ;;#ASMSTART1795; GFX900-NEXT:    ; def v[0:1]1796; GFX900-NEXT:    ;;#ASMEND1797; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1798; GFX900-NEXT:    s_waitcnt vmcnt(0)1799; GFX900-NEXT:    s_setpc_b64 s[30:31]1800;1801; GFX90A-LABEL: v_shuffle_v2f16_v3f16__3_4:1802; GFX90A:       ; %bb.0:1803; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1804; GFX90A-NEXT:    v_mov_b32_e32 v2, 01805; GFX90A-NEXT:    ;;#ASMSTART1806; GFX90A-NEXT:    ; def v[0:1]1807; GFX90A-NEXT:    ;;#ASMEND1808; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1809; GFX90A-NEXT:    s_waitcnt vmcnt(0)1810; GFX90A-NEXT:    s_setpc_b64 s[30:31]1811;1812; GFX942-LABEL: v_shuffle_v2f16_v3f16__3_4:1813; GFX942:       ; %bb.0:1814; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX942-NEXT:    v_mov_b32_e32 v2, 01816; GFX942-NEXT:    ;;#ASMSTART1817; GFX942-NEXT:    ; def v[0:1]1818; GFX942-NEXT:    ;;#ASMEND1819; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1820; GFX942-NEXT:    s_waitcnt vmcnt(0)1821; GFX942-NEXT:    s_setpc_b64 s[30:31]1822  %vec0 = call <4 x half> asm "; def $0", "=v"()1823  %vec1 = call <4 x half> asm "; def $0", "=v"()1824  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1825  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1826  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 3, i32 4>1827  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41828  ret void1829}1830 1831define void @v_shuffle_v2f16_v3f16__4_4(ptr addrspace(1) inreg %ptr) {1832; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_4:1833; GFX900:       ; %bb.0:1834; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1835; GFX900-NEXT:    ;;#ASMSTART1836; GFX900-NEXT:    ; def v[0:1]1837; GFX900-NEXT:    ;;#ASMEND1838; GFX900-NEXT:    s_mov_b32 s4, 0x70603021839; GFX900-NEXT:    v_mov_b32_e32 v2, 01840; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s41841; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1842; GFX900-NEXT:    s_waitcnt vmcnt(0)1843; GFX900-NEXT:    s_setpc_b64 s[30:31]1844;1845; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_4:1846; GFX90A:       ; %bb.0:1847; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1848; GFX90A-NEXT:    ;;#ASMSTART1849; GFX90A-NEXT:    ; def v[0:1]1850; GFX90A-NEXT:    ;;#ASMEND1851; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021852; GFX90A-NEXT:    v_mov_b32_e32 v2, 01853; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s41854; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1855; GFX90A-NEXT:    s_waitcnt vmcnt(0)1856; GFX90A-NEXT:    s_setpc_b64 s[30:31]1857;1858; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_4:1859; GFX942:       ; %bb.0:1860; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1861; GFX942-NEXT:    ;;#ASMSTART1862; GFX942-NEXT:    ; def v[0:1]1863; GFX942-NEXT:    ;;#ASMEND1864; GFX942-NEXT:    s_mov_b32 s2, 0x70603021865; GFX942-NEXT:    v_mov_b32_e32 v2, 01866; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s21867; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1868; GFX942-NEXT:    s_waitcnt vmcnt(0)1869; GFX942-NEXT:    s_setpc_b64 s[30:31]1870  %vec0 = call <4 x half> asm "; def $0", "=v"()1871  %vec1 = call <4 x half> asm "; def $0", "=v"()1872  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1873  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1874  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 4>1875  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41876  ret void1877}1878 1879define void @v_shuffle_v2f16_v3f16__u_5(ptr addrspace(1) inreg %ptr) {1880; GFX900-LABEL: v_shuffle_v2f16_v3f16__u_5:1881; GFX900:       ; %bb.0:1882; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX900-NEXT:    ;;#ASMSTART1884; GFX900-NEXT:    ; def v[0:1]1885; GFX900-NEXT:    ;;#ASMEND1886; GFX900-NEXT:    v_mov_b32_e32 v2, 01887; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v11888; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1889; GFX900-NEXT:    s_waitcnt vmcnt(0)1890; GFX900-NEXT:    s_setpc_b64 s[30:31]1891;1892; GFX90A-LABEL: v_shuffle_v2f16_v3f16__u_5:1893; GFX90A:       ; %bb.0:1894; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1895; GFX90A-NEXT:    ;;#ASMSTART1896; GFX90A-NEXT:    ; def v[0:1]1897; GFX90A-NEXT:    ;;#ASMEND1898; GFX90A-NEXT:    v_mov_b32_e32 v2, 01899; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v11900; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1901; GFX90A-NEXT:    s_waitcnt vmcnt(0)1902; GFX90A-NEXT:    s_setpc_b64 s[30:31]1903;1904; GFX942-LABEL: v_shuffle_v2f16_v3f16__u_5:1905; GFX942:       ; %bb.0:1906; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1907; GFX942-NEXT:    ;;#ASMSTART1908; GFX942-NEXT:    ; def v[0:1]1909; GFX942-NEXT:    ;;#ASMEND1910; GFX942-NEXT:    v_mov_b32_e32 v2, 01911; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v11912; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1913; GFX942-NEXT:    s_waitcnt vmcnt(0)1914; GFX942-NEXT:    s_setpc_b64 s[30:31]1915  %vec0 = call <4 x half> asm "; def $0", "=v"()1916  %vec1 = call <4 x half> asm "; def $0", "=v"()1917  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1918  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1919  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 poison, i32 5>1920  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41921  ret void1922}1923 1924define void @v_shuffle_v2f16_v3f16__0_5(ptr addrspace(1) inreg %ptr) {1925; GFX900-LABEL: v_shuffle_v2f16_v3f16__0_5:1926; GFX900:       ; %bb.0:1927; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1928; GFX900-NEXT:    ;;#ASMSTART1929; GFX900-NEXT:    ; def v[0:1]1930; GFX900-NEXT:    ;;#ASMEND1931; GFX900-NEXT:    s_mov_b32 s4, 0x50401001932; GFX900-NEXT:    v_mov_b32_e32 v3, 01933; GFX900-NEXT:    ;;#ASMSTART1934; GFX900-NEXT:    ; def v[1:2]1935; GFX900-NEXT:    ;;#ASMEND1936; GFX900-NEXT:    v_perm_b32 v0, v2, v0, s41937; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1938; GFX900-NEXT:    s_waitcnt vmcnt(0)1939; GFX900-NEXT:    s_setpc_b64 s[30:31]1940;1941; GFX90A-LABEL: v_shuffle_v2f16_v3f16__0_5:1942; GFX90A:       ; %bb.0:1943; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX90A-NEXT:    ;;#ASMSTART1945; GFX90A-NEXT:    ; def v[0:1]1946; GFX90A-NEXT:    ;;#ASMEND1947; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001948; GFX90A-NEXT:    v_mov_b32_e32 v4, 01949; GFX90A-NEXT:    ;;#ASMSTART1950; GFX90A-NEXT:    ; def v[2:3]1951; GFX90A-NEXT:    ;;#ASMEND1952; GFX90A-NEXT:    v_perm_b32 v0, v3, v0, s41953; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1954; GFX90A-NEXT:    s_waitcnt vmcnt(0)1955; GFX90A-NEXT:    s_setpc_b64 s[30:31]1956;1957; GFX942-LABEL: v_shuffle_v2f16_v3f16__0_5:1958; GFX942:       ; %bb.0:1959; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1960; GFX942-NEXT:    ;;#ASMSTART1961; GFX942-NEXT:    ; def v[0:1]1962; GFX942-NEXT:    ;;#ASMEND1963; GFX942-NEXT:    s_mov_b32 s2, 0x50401001964; GFX942-NEXT:    v_mov_b32_e32 v4, 01965; GFX942-NEXT:    ;;#ASMSTART1966; GFX942-NEXT:    ; def v[2:3]1967; GFX942-NEXT:    ;;#ASMEND1968; GFX942-NEXT:    s_nop 01969; GFX942-NEXT:    v_perm_b32 v0, v3, v0, s21970; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1971; GFX942-NEXT:    s_waitcnt vmcnt(0)1972; GFX942-NEXT:    s_setpc_b64 s[30:31]1973  %vec0 = call <4 x half> asm "; def $0", "=v"()1974  %vec1 = call <4 x half> asm "; def $0", "=v"()1975  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1976  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1977  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 0, i32 5>1978  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41979  ret void1980}1981 1982define void @v_shuffle_v2f16_v3f16__1_5(ptr addrspace(1) inreg %ptr) {1983; GFX900-LABEL: v_shuffle_v2f16_v3f16__1_5:1984; GFX900:       ; %bb.0:1985; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1986; GFX900-NEXT:    ;;#ASMSTART1987; GFX900-NEXT:    ; def v[0:1]1988; GFX900-NEXT:    ;;#ASMEND1989; GFX900-NEXT:    v_mov_b32_e32 v3, 01990; GFX900-NEXT:    ;;#ASMSTART1991; GFX900-NEXT:    ; def v[1:2]1992; GFX900-NEXT:    ;;#ASMEND1993; GFX900-NEXT:    v_alignbit_b32 v0, v2, v0, 161994; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1995; GFX900-NEXT:    s_waitcnt vmcnt(0)1996; GFX900-NEXT:    s_setpc_b64 s[30:31]1997;1998; GFX90A-LABEL: v_shuffle_v2f16_v3f16__1_5:1999; GFX90A:       ; %bb.0:2000; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2001; GFX90A-NEXT:    ;;#ASMSTART2002; GFX90A-NEXT:    ; def v[0:1]2003; GFX90A-NEXT:    ;;#ASMEND2004; GFX90A-NEXT:    v_mov_b32_e32 v4, 02005; GFX90A-NEXT:    ;;#ASMSTART2006; GFX90A-NEXT:    ; def v[2:3]2007; GFX90A-NEXT:    ;;#ASMEND2008; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v0, 162009; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2010; GFX90A-NEXT:    s_waitcnt vmcnt(0)2011; GFX90A-NEXT:    s_setpc_b64 s[30:31]2012;2013; GFX942-LABEL: v_shuffle_v2f16_v3f16__1_5:2014; GFX942:       ; %bb.0:2015; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2016; GFX942-NEXT:    ;;#ASMSTART2017; GFX942-NEXT:    ; def v[0:1]2018; GFX942-NEXT:    ;;#ASMEND2019; GFX942-NEXT:    v_mov_b32_e32 v4, 02020; GFX942-NEXT:    ;;#ASMSTART2021; GFX942-NEXT:    ; def v[2:3]2022; GFX942-NEXT:    ;;#ASMEND2023; GFX942-NEXT:    s_nop 02024; GFX942-NEXT:    v_alignbit_b32 v0, v3, v0, 162025; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2026; GFX942-NEXT:    s_waitcnt vmcnt(0)2027; GFX942-NEXT:    s_setpc_b64 s[30:31]2028  %vec0 = call <4 x half> asm "; def $0", "=v"()2029  %vec1 = call <4 x half> asm "; def $0", "=v"()2030  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2031  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2032  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 1, i32 5>2033  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42034  ret void2035}2036 2037define void @v_shuffle_v2f16_v3f16__2_5(ptr addrspace(1) inreg %ptr) {2038; GFX900-LABEL: v_shuffle_v2f16_v3f16__2_5:2039; GFX900:       ; %bb.0:2040; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2041; GFX900-NEXT:    ;;#ASMSTART2042; GFX900-NEXT:    ; def v[0:1]2043; GFX900-NEXT:    ;;#ASMEND2044; GFX900-NEXT:    s_mov_b32 s4, 0x50401002045; GFX900-NEXT:    v_mov_b32_e32 v4, 02046; GFX900-NEXT:    ;;#ASMSTART2047; GFX900-NEXT:    ; def v[2:3]2048; GFX900-NEXT:    ;;#ASMEND2049; GFX900-NEXT:    v_perm_b32 v0, v3, v1, s42050; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2051; GFX900-NEXT:    s_waitcnt vmcnt(0)2052; GFX900-NEXT:    s_setpc_b64 s[30:31]2053;2054; GFX90A-LABEL: v_shuffle_v2f16_v3f16__2_5:2055; GFX90A:       ; %bb.0:2056; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2057; GFX90A-NEXT:    ;;#ASMSTART2058; GFX90A-NEXT:    ; def v[0:1]2059; GFX90A-NEXT:    ;;#ASMEND2060; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002061; GFX90A-NEXT:    v_mov_b32_e32 v4, 02062; GFX90A-NEXT:    ;;#ASMSTART2063; GFX90A-NEXT:    ; def v[2:3]2064; GFX90A-NEXT:    ;;#ASMEND2065; GFX90A-NEXT:    v_perm_b32 v0, v3, v1, s42066; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2067; GFX90A-NEXT:    s_waitcnt vmcnt(0)2068; GFX90A-NEXT:    s_setpc_b64 s[30:31]2069;2070; GFX942-LABEL: v_shuffle_v2f16_v3f16__2_5:2071; GFX942:       ; %bb.0:2072; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2073; GFX942-NEXT:    ;;#ASMSTART2074; GFX942-NEXT:    ; def v[0:1]2075; GFX942-NEXT:    ;;#ASMEND2076; GFX942-NEXT:    s_mov_b32 s2, 0x50401002077; GFX942-NEXT:    v_mov_b32_e32 v4, 02078; GFX942-NEXT:    ;;#ASMSTART2079; GFX942-NEXT:    ; def v[2:3]2080; GFX942-NEXT:    ;;#ASMEND2081; GFX942-NEXT:    s_nop 02082; GFX942-NEXT:    v_perm_b32 v0, v3, v1, s22083; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2084; GFX942-NEXT:    s_waitcnt vmcnt(0)2085; GFX942-NEXT:    s_setpc_b64 s[30:31]2086  %vec0 = call <4 x half> asm "; def $0", "=v"()2087  %vec1 = call <4 x half> asm "; def $0", "=v"()2088  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2089  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2090  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 2, i32 5>2091  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42092  ret void2093}2094 2095define void @v_shuffle_v2f16_v3f16__3_5(ptr addrspace(1) inreg %ptr) {2096; GFX900-LABEL: v_shuffle_v2f16_v3f16__3_5:2097; GFX900:       ; %bb.0:2098; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX900-NEXT:    ;;#ASMSTART2100; GFX900-NEXT:    ; def v[0:1]2101; GFX900-NEXT:    ;;#ASMEND2102; GFX900-NEXT:    s_mov_b32 s4, 0x50401002103; GFX900-NEXT:    v_mov_b32_e32 v2, 02104; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s42105; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2106; GFX900-NEXT:    s_waitcnt vmcnt(0)2107; GFX900-NEXT:    s_setpc_b64 s[30:31]2108;2109; GFX90A-LABEL: v_shuffle_v2f16_v3f16__3_5:2110; GFX90A:       ; %bb.0:2111; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2112; GFX90A-NEXT:    ;;#ASMSTART2113; GFX90A-NEXT:    ; def v[0:1]2114; GFX90A-NEXT:    ;;#ASMEND2115; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002116; GFX90A-NEXT:    v_mov_b32_e32 v2, 02117; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s42118; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2119; GFX90A-NEXT:    s_waitcnt vmcnt(0)2120; GFX90A-NEXT:    s_setpc_b64 s[30:31]2121;2122; GFX942-LABEL: v_shuffle_v2f16_v3f16__3_5:2123; GFX942:       ; %bb.0:2124; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2125; GFX942-NEXT:    ;;#ASMSTART2126; GFX942-NEXT:    ; def v[0:1]2127; GFX942-NEXT:    ;;#ASMEND2128; GFX942-NEXT:    s_mov_b32 s2, 0x50401002129; GFX942-NEXT:    v_mov_b32_e32 v2, 02130; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s22131; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2132; GFX942-NEXT:    s_waitcnt vmcnt(0)2133; GFX942-NEXT:    s_setpc_b64 s[30:31]2134  %vec0 = call <4 x half> asm "; def $0", "=v"()2135  %vec1 = call <4 x half> asm "; def $0", "=v"()2136  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2137  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2138  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 3, i32 5>2139  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42140  ret void2141}2142 2143define void @v_shuffle_v2f16_v3f16__4_5(ptr addrspace(1) inreg %ptr) {2144; GFX900-LABEL: v_shuffle_v2f16_v3f16__4_5:2145; GFX900:       ; %bb.0:2146; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2147; GFX900-NEXT:    ;;#ASMSTART2148; GFX900-NEXT:    ; def v[0:1]2149; GFX900-NEXT:    ;;#ASMEND2150; GFX900-NEXT:    v_mov_b32_e32 v2, 02151; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 162152; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2153; GFX900-NEXT:    s_waitcnt vmcnt(0)2154; GFX900-NEXT:    s_setpc_b64 s[30:31]2155;2156; GFX90A-LABEL: v_shuffle_v2f16_v3f16__4_5:2157; GFX90A:       ; %bb.0:2158; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2159; GFX90A-NEXT:    ;;#ASMSTART2160; GFX90A-NEXT:    ; def v[0:1]2161; GFX90A-NEXT:    ;;#ASMEND2162; GFX90A-NEXT:    v_mov_b32_e32 v2, 02163; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 162164; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2165; GFX90A-NEXT:    s_waitcnt vmcnt(0)2166; GFX90A-NEXT:    s_setpc_b64 s[30:31]2167;2168; GFX942-LABEL: v_shuffle_v2f16_v3f16__4_5:2169; GFX942:       ; %bb.0:2170; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2171; GFX942-NEXT:    ;;#ASMSTART2172; GFX942-NEXT:    ; def v[0:1]2173; GFX942-NEXT:    ;;#ASMEND2174; GFX942-NEXT:    v_mov_b32_e32 v2, 02175; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 162176; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2177; GFX942-NEXT:    s_waitcnt vmcnt(0)2178; GFX942-NEXT:    s_setpc_b64 s[30:31]2179  %vec0 = call <4 x half> asm "; def $0", "=v"()2180  %vec1 = call <4 x half> asm "; def $0", "=v"()2181  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2182  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2183  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 5>2184  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42185  ret void2186}2187 2188define void @s_shuffle_v2f16_v3f16__u_u() {2189; GFX9-LABEL: s_shuffle_v2f16_v3f16__u_u:2190; GFX9:       ; %bb.0:2191; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2192; GFX9-NEXT:    ;;#ASMSTART2193; GFX9-NEXT:    ; use s82194; GFX9-NEXT:    ;;#ASMEND2195; GFX9-NEXT:    s_setpc_b64 s[30:31]2196  %vec0 = call <4 x half> asm "; def $0", "=s"()2197  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2198  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> poison2199  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2200  ret void2201}2202 2203define void @s_shuffle_v2f16_v3f16__0_u() {2204; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_u:2205; GFX900:       ; %bb.0:2206; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2207; GFX900-NEXT:    ;;#ASMSTART2208; GFX900-NEXT:    ; def s[8:9]2209; GFX900-NEXT:    ;;#ASMEND2210; GFX900-NEXT:    ;;#ASMSTART2211; GFX900-NEXT:    ; use s82212; GFX900-NEXT:    ;;#ASMEND2213; GFX900-NEXT:    s_setpc_b64 s[30:31]2214;2215; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_u:2216; GFX90A:       ; %bb.0:2217; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2218; GFX90A-NEXT:    ;;#ASMSTART2219; GFX90A-NEXT:    ; def s[8:9]2220; GFX90A-NEXT:    ;;#ASMEND2221; GFX90A-NEXT:    ;;#ASMSTART2222; GFX90A-NEXT:    ; use s82223; GFX90A-NEXT:    ;;#ASMEND2224; GFX90A-NEXT:    s_setpc_b64 s[30:31]2225;2226; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_u:2227; GFX942:       ; %bb.0:2228; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX942-NEXT:    ;;#ASMSTART2230; GFX942-NEXT:    ; def s[8:9]2231; GFX942-NEXT:    ;;#ASMEND2232; GFX942-NEXT:    s_nop 02233; GFX942-NEXT:    ;;#ASMSTART2234; GFX942-NEXT:    ; use s82235; GFX942-NEXT:    ;;#ASMEND2236; GFX942-NEXT:    s_setpc_b64 s[30:31]2237  %vec0 = call <4 x half> asm "; def $0", "=s"()2238  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2239  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 poison>2240  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2241  ret void2242}2243 2244define void @s_shuffle_v2f16_v3f16__1_u() {2245; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_u:2246; GFX900:       ; %bb.0:2247; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2248; GFX900-NEXT:    ;;#ASMSTART2249; GFX900-NEXT:    ; def s[4:5]2250; GFX900-NEXT:    ;;#ASMEND2251; GFX900-NEXT:    s_lshr_b32 s8, s4, 162252; GFX900-NEXT:    ;;#ASMSTART2253; GFX900-NEXT:    ; use s82254; GFX900-NEXT:    ;;#ASMEND2255; GFX900-NEXT:    s_setpc_b64 s[30:31]2256;2257; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_u:2258; GFX90A:       ; %bb.0:2259; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2260; GFX90A-NEXT:    ;;#ASMSTART2261; GFX90A-NEXT:    ; def s[4:5]2262; GFX90A-NEXT:    ;;#ASMEND2263; GFX90A-NEXT:    s_lshr_b32 s8, s4, 162264; GFX90A-NEXT:    ;;#ASMSTART2265; GFX90A-NEXT:    ; use s82266; GFX90A-NEXT:    ;;#ASMEND2267; GFX90A-NEXT:    s_setpc_b64 s[30:31]2268;2269; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_u:2270; GFX942:       ; %bb.0:2271; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2272; GFX942-NEXT:    ;;#ASMSTART2273; GFX942-NEXT:    ; def s[0:1]2274; GFX942-NEXT:    ;;#ASMEND2275; GFX942-NEXT:    s_lshr_b32 s8, s0, 162276; GFX942-NEXT:    ;;#ASMSTART2277; GFX942-NEXT:    ; use s82278; GFX942-NEXT:    ;;#ASMEND2279; GFX942-NEXT:    s_setpc_b64 s[30:31]2280  %vec0 = call <4 x half> asm "; def $0", "=s"()2281  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2282  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 poison>2283  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2284  ret void2285}2286 2287define void @s_shuffle_v2f16_v3f16__2_u() {2288; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_u:2289; GFX900:       ; %bb.0:2290; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2291; GFX900-NEXT:    ;;#ASMSTART2292; GFX900-NEXT:    ; def s[4:5]2293; GFX900-NEXT:    ;;#ASMEND2294; GFX900-NEXT:    s_mov_b32 s8, s52295; GFX900-NEXT:    ;;#ASMSTART2296; GFX900-NEXT:    ; use s82297; GFX900-NEXT:    ;;#ASMEND2298; GFX900-NEXT:    s_setpc_b64 s[30:31]2299;2300; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_u:2301; GFX90A:       ; %bb.0:2302; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2303; GFX90A-NEXT:    ;;#ASMSTART2304; GFX90A-NEXT:    ; def s[4:5]2305; GFX90A-NEXT:    ;;#ASMEND2306; GFX90A-NEXT:    s_mov_b32 s8, s52307; GFX90A-NEXT:    ;;#ASMSTART2308; GFX90A-NEXT:    ; use s82309; GFX90A-NEXT:    ;;#ASMEND2310; GFX90A-NEXT:    s_setpc_b64 s[30:31]2311;2312; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_u:2313; GFX942:       ; %bb.0:2314; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2315; GFX942-NEXT:    ;;#ASMSTART2316; GFX942-NEXT:    ; def s[0:1]2317; GFX942-NEXT:    ;;#ASMEND2318; GFX942-NEXT:    s_mov_b32 s8, s12319; GFX942-NEXT:    ;;#ASMSTART2320; GFX942-NEXT:    ; use s82321; GFX942-NEXT:    ;;#ASMEND2322; GFX942-NEXT:    s_setpc_b64 s[30:31]2323  %vec0 = call <4 x half> asm "; def $0", "=s"()2324  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2325  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 poison>2326  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2327  ret void2328}2329 2330define void @s_shuffle_v2f16_v3f16__3_u() {2331; GFX9-LABEL: s_shuffle_v2f16_v3f16__3_u:2332; GFX9:       ; %bb.0:2333; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX9-NEXT:    ;;#ASMSTART2335; GFX9-NEXT:    ; use s82336; GFX9-NEXT:    ;;#ASMEND2337; GFX9-NEXT:    s_setpc_b64 s[30:31]2338  %vec0 = call <4 x half> asm "; def $0", "=s"()2339  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2340  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 poison>2341  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2342  ret void2343}2344 2345define void @s_shuffle_v2f16_v3f16__4_u() {2346; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_u:2347; GFX900:       ; %bb.0:2348; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX900-NEXT:    ;;#ASMSTART2350; GFX900-NEXT:    ; def s[4:5]2351; GFX900-NEXT:    ;;#ASMEND2352; GFX900-NEXT:    s_lshr_b32 s8, s4, 162353; GFX900-NEXT:    ;;#ASMSTART2354; GFX900-NEXT:    ; use s82355; GFX900-NEXT:    ;;#ASMEND2356; GFX900-NEXT:    s_setpc_b64 s[30:31]2357;2358; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_u:2359; GFX90A:       ; %bb.0:2360; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX90A-NEXT:    ;;#ASMSTART2362; GFX90A-NEXT:    ; def s[4:5]2363; GFX90A-NEXT:    ;;#ASMEND2364; GFX90A-NEXT:    s_lshr_b32 s8, s4, 162365; GFX90A-NEXT:    ;;#ASMSTART2366; GFX90A-NEXT:    ; use s82367; GFX90A-NEXT:    ;;#ASMEND2368; GFX90A-NEXT:    s_setpc_b64 s[30:31]2369;2370; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_u:2371; GFX942:       ; %bb.0:2372; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2373; GFX942-NEXT:    ;;#ASMSTART2374; GFX942-NEXT:    ; def s[0:1]2375; GFX942-NEXT:    ;;#ASMEND2376; GFX942-NEXT:    s_lshr_b32 s8, s0, 162377; GFX942-NEXT:    ;;#ASMSTART2378; GFX942-NEXT:    ; use s82379; GFX942-NEXT:    ;;#ASMEND2380; GFX942-NEXT:    s_setpc_b64 s[30:31]2381  %vec0 = call <4 x half> asm "; def $0", "=s"()2382  %vec1 = call <4 x half> asm "; def $0", "=s"()2383  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2384  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2385  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 poison>2386  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2387  ret void2388}2389 2390define void @s_shuffle_v2f16_v3f16__5_u() {2391; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_u:2392; GFX900:       ; %bb.0:2393; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2394; GFX900-NEXT:    ;;#ASMSTART2395; GFX900-NEXT:    ; def s[4:5]2396; GFX900-NEXT:    ;;#ASMEND2397; GFX900-NEXT:    s_mov_b32 s8, s52398; GFX900-NEXT:    ;;#ASMSTART2399; GFX900-NEXT:    ; use s82400; GFX900-NEXT:    ;;#ASMEND2401; GFX900-NEXT:    s_setpc_b64 s[30:31]2402;2403; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_u:2404; GFX90A:       ; %bb.0:2405; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX90A-NEXT:    ;;#ASMSTART2407; GFX90A-NEXT:    ; def s[4:5]2408; GFX90A-NEXT:    ;;#ASMEND2409; GFX90A-NEXT:    s_mov_b32 s8, s52410; GFX90A-NEXT:    ;;#ASMSTART2411; GFX90A-NEXT:    ; use s82412; GFX90A-NEXT:    ;;#ASMEND2413; GFX90A-NEXT:    s_setpc_b64 s[30:31]2414;2415; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_u:2416; GFX942:       ; %bb.0:2417; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2418; GFX942-NEXT:    ;;#ASMSTART2419; GFX942-NEXT:    ; def s[0:1]2420; GFX942-NEXT:    ;;#ASMEND2421; GFX942-NEXT:    s_mov_b32 s8, s12422; GFX942-NEXT:    ;;#ASMSTART2423; GFX942-NEXT:    ; use s82424; GFX942-NEXT:    ;;#ASMEND2425; GFX942-NEXT:    s_setpc_b64 s[30:31]2426  %vec0 = call <4 x half> asm "; def $0", "=s"()2427  %vec1 = call <4 x half> asm "; def $0", "=s"()2428  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2429  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2430  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 poison>2431  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2432  ret void2433}2434 2435define void @s_shuffle_v2f16_v3f16__5_0() {2436; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_0:2437; GFX900:       ; %bb.0:2438; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2439; GFX900-NEXT:    ;;#ASMSTART2440; GFX900-NEXT:    ; def s[4:5]2441; GFX900-NEXT:    ;;#ASMEND2442; GFX900-NEXT:    ;;#ASMSTART2443; GFX900-NEXT:    ; def s[6:7]2444; GFX900-NEXT:    ;;#ASMEND2445; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s42446; GFX900-NEXT:    ;;#ASMSTART2447; GFX900-NEXT:    ; use s82448; GFX900-NEXT:    ;;#ASMEND2449; GFX900-NEXT:    s_setpc_b64 s[30:31]2450;2451; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_0:2452; GFX90A:       ; %bb.0:2453; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2454; GFX90A-NEXT:    ;;#ASMSTART2455; GFX90A-NEXT:    ; def s[4:5]2456; GFX90A-NEXT:    ;;#ASMEND2457; GFX90A-NEXT:    ;;#ASMSTART2458; GFX90A-NEXT:    ; def s[6:7]2459; GFX90A-NEXT:    ;;#ASMEND2460; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s42461; GFX90A-NEXT:    ;;#ASMSTART2462; GFX90A-NEXT:    ; use s82463; GFX90A-NEXT:    ;;#ASMEND2464; GFX90A-NEXT:    s_setpc_b64 s[30:31]2465;2466; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_0:2467; GFX942:       ; %bb.0:2468; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2469; GFX942-NEXT:    ;;#ASMSTART2470; GFX942-NEXT:    ; def s[0:1]2471; GFX942-NEXT:    ;;#ASMEND2472; GFX942-NEXT:    ;;#ASMSTART2473; GFX942-NEXT:    ; def s[2:3]2474; GFX942-NEXT:    ;;#ASMEND2475; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s02476; GFX942-NEXT:    ;;#ASMSTART2477; GFX942-NEXT:    ; use s82478; GFX942-NEXT:    ;;#ASMEND2479; GFX942-NEXT:    s_setpc_b64 s[30:31]2480  %vec0 = call <4 x half> asm "; def $0", "=s"()2481  %vec1 = call <4 x half> asm "; def $0", "=s"()2482  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2483  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2484  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 0>2485  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2486  ret void2487}2488 2489define void @s_shuffle_v2f16_v3f16__5_1() {2490; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_1:2491; GFX900:       ; %bb.0:2492; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2493; GFX900-NEXT:    ;;#ASMSTART2494; GFX900-NEXT:    ; def s[4:5]2495; GFX900-NEXT:    ;;#ASMEND2496; GFX900-NEXT:    s_lshr_b32 s4, s4, 162497; GFX900-NEXT:    ;;#ASMSTART2498; GFX900-NEXT:    ; def s[6:7]2499; GFX900-NEXT:    ;;#ASMEND2500; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s42501; GFX900-NEXT:    ;;#ASMSTART2502; GFX900-NEXT:    ; use s82503; GFX900-NEXT:    ;;#ASMEND2504; GFX900-NEXT:    s_setpc_b64 s[30:31]2505;2506; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_1:2507; GFX90A:       ; %bb.0:2508; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2509; GFX90A-NEXT:    ;;#ASMSTART2510; GFX90A-NEXT:    ; def s[4:5]2511; GFX90A-NEXT:    ;;#ASMEND2512; GFX90A-NEXT:    s_lshr_b32 s4, s4, 162513; GFX90A-NEXT:    ;;#ASMSTART2514; GFX90A-NEXT:    ; def s[6:7]2515; GFX90A-NEXT:    ;;#ASMEND2516; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s42517; GFX90A-NEXT:    ;;#ASMSTART2518; GFX90A-NEXT:    ; use s82519; GFX90A-NEXT:    ;;#ASMEND2520; GFX90A-NEXT:    s_setpc_b64 s[30:31]2521;2522; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_1:2523; GFX942:       ; %bb.0:2524; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2525; GFX942-NEXT:    ;;#ASMSTART2526; GFX942-NEXT:    ; def s[0:1]2527; GFX942-NEXT:    ;;#ASMEND2528; GFX942-NEXT:    s_lshr_b32 s0, s0, 162529; GFX942-NEXT:    ;;#ASMSTART2530; GFX942-NEXT:    ; def s[2:3]2531; GFX942-NEXT:    ;;#ASMEND2532; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s02533; GFX942-NEXT:    ;;#ASMSTART2534; GFX942-NEXT:    ; use s82535; GFX942-NEXT:    ;;#ASMEND2536; GFX942-NEXT:    s_setpc_b64 s[30:31]2537  %vec0 = call <4 x half> asm "; def $0", "=s"()2538  %vec1 = call <4 x half> asm "; def $0", "=s"()2539  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2540  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2541  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 1>2542  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2543  ret void2544}2545 2546define void @s_shuffle_v2f16_v3f16__5_2() {2547; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_2:2548; GFX900:       ; %bb.0:2549; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2550; GFX900-NEXT:    ;;#ASMSTART2551; GFX900-NEXT:    ; def s[4:5]2552; GFX900-NEXT:    ;;#ASMEND2553; GFX900-NEXT:    ;;#ASMSTART2554; GFX900-NEXT:    ; def s[6:7]2555; GFX900-NEXT:    ;;#ASMEND2556; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s52557; GFX900-NEXT:    ;;#ASMSTART2558; GFX900-NEXT:    ; use s82559; GFX900-NEXT:    ;;#ASMEND2560; GFX900-NEXT:    s_setpc_b64 s[30:31]2561;2562; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_2:2563; GFX90A:       ; %bb.0:2564; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2565; GFX90A-NEXT:    ;;#ASMSTART2566; GFX90A-NEXT:    ; def s[4:5]2567; GFX90A-NEXT:    ;;#ASMEND2568; GFX90A-NEXT:    ;;#ASMSTART2569; GFX90A-NEXT:    ; def s[6:7]2570; GFX90A-NEXT:    ;;#ASMEND2571; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s52572; GFX90A-NEXT:    ;;#ASMSTART2573; GFX90A-NEXT:    ; use s82574; GFX90A-NEXT:    ;;#ASMEND2575; GFX90A-NEXT:    s_setpc_b64 s[30:31]2576;2577; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_2:2578; GFX942:       ; %bb.0:2579; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX942-NEXT:    ;;#ASMSTART2581; GFX942-NEXT:    ; def s[0:1]2582; GFX942-NEXT:    ;;#ASMEND2583; GFX942-NEXT:    ;;#ASMSTART2584; GFX942-NEXT:    ; def s[2:3]2585; GFX942-NEXT:    ;;#ASMEND2586; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s12587; GFX942-NEXT:    ;;#ASMSTART2588; GFX942-NEXT:    ; use s82589; GFX942-NEXT:    ;;#ASMEND2590; GFX942-NEXT:    s_setpc_b64 s[30:31]2591  %vec0 = call <4 x half> asm "; def $0", "=s"()2592  %vec1 = call <4 x half> asm "; def $0", "=s"()2593  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2594  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2595  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 2>2596  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2597  ret void2598}2599 2600define void @s_shuffle_v2f16_v3f16__5_3() {2601; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_3:2602; GFX900:       ; %bb.0:2603; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2604; GFX900-NEXT:    ;;#ASMSTART2605; GFX900-NEXT:    ; def s[4:5]2606; GFX900-NEXT:    ;;#ASMEND2607; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s42608; GFX900-NEXT:    ;;#ASMSTART2609; GFX900-NEXT:    ; use s82610; GFX900-NEXT:    ;;#ASMEND2611; GFX900-NEXT:    s_setpc_b64 s[30:31]2612;2613; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_3:2614; GFX90A:       ; %bb.0:2615; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2616; GFX90A-NEXT:    ;;#ASMSTART2617; GFX90A-NEXT:    ; def s[4:5]2618; GFX90A-NEXT:    ;;#ASMEND2619; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s42620; GFX90A-NEXT:    ;;#ASMSTART2621; GFX90A-NEXT:    ; use s82622; GFX90A-NEXT:    ;;#ASMEND2623; GFX90A-NEXT:    s_setpc_b64 s[30:31]2624;2625; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_3:2626; GFX942:       ; %bb.0:2627; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2628; GFX942-NEXT:    ;;#ASMSTART2629; GFX942-NEXT:    ; def s[0:1]2630; GFX942-NEXT:    ;;#ASMEND2631; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s02632; GFX942-NEXT:    ;;#ASMSTART2633; GFX942-NEXT:    ; use s82634; GFX942-NEXT:    ;;#ASMEND2635; GFX942-NEXT:    s_setpc_b64 s[30:31]2636  %vec0 = call <4 x half> asm "; def $0", "=s"()2637  %vec1 = call <4 x half> asm "; def $0", "=s"()2638  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2639  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2640  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 3>2641  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2642  ret void2643}2644 2645define void @s_shuffle_v2f16_v3f16__5_4() {2646; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_4:2647; GFX900:       ; %bb.0:2648; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2649; GFX900-NEXT:    ;;#ASMSTART2650; GFX900-NEXT:    ; def s[4:5]2651; GFX900-NEXT:    ;;#ASMEND2652; GFX900-NEXT:    s_lshr_b32 s4, s4, 162653; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s42654; GFX900-NEXT:    ;;#ASMSTART2655; GFX900-NEXT:    ; use s82656; GFX900-NEXT:    ;;#ASMEND2657; GFX900-NEXT:    s_setpc_b64 s[30:31]2658;2659; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_4:2660; GFX90A:       ; %bb.0:2661; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2662; GFX90A-NEXT:    ;;#ASMSTART2663; GFX90A-NEXT:    ; def s[4:5]2664; GFX90A-NEXT:    ;;#ASMEND2665; GFX90A-NEXT:    s_lshr_b32 s4, s4, 162666; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s42667; GFX90A-NEXT:    ;;#ASMSTART2668; GFX90A-NEXT:    ; use s82669; GFX90A-NEXT:    ;;#ASMEND2670; GFX90A-NEXT:    s_setpc_b64 s[30:31]2671;2672; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_4:2673; GFX942:       ; %bb.0:2674; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2675; GFX942-NEXT:    ;;#ASMSTART2676; GFX942-NEXT:    ; def s[0:1]2677; GFX942-NEXT:    ;;#ASMEND2678; GFX942-NEXT:    s_lshr_b32 s0, s0, 162679; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s02680; GFX942-NEXT:    ;;#ASMSTART2681; GFX942-NEXT:    ; use s82682; GFX942-NEXT:    ;;#ASMEND2683; GFX942-NEXT:    s_setpc_b64 s[30:31]2684  %vec0 = call <4 x half> asm "; def $0", "=s"()2685  %vec1 = call <4 x half> asm "; def $0", "=s"()2686  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2687  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2688  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 4>2689  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2690  ret void2691}2692 2693define void @s_shuffle_v2f16_v3f16__5_5() {2694; GFX900-LABEL: s_shuffle_v2f16_v3f16__5_5:2695; GFX900:       ; %bb.0:2696; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2697; GFX900-NEXT:    ;;#ASMSTART2698; GFX900-NEXT:    ; def s[4:5]2699; GFX900-NEXT:    ;;#ASMEND2700; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s52701; GFX900-NEXT:    ;;#ASMSTART2702; GFX900-NEXT:    ; use s82703; GFX900-NEXT:    ;;#ASMEND2704; GFX900-NEXT:    s_setpc_b64 s[30:31]2705;2706; GFX90A-LABEL: s_shuffle_v2f16_v3f16__5_5:2707; GFX90A:       ; %bb.0:2708; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2709; GFX90A-NEXT:    ;;#ASMSTART2710; GFX90A-NEXT:    ; def s[4:5]2711; GFX90A-NEXT:    ;;#ASMEND2712; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s52713; GFX90A-NEXT:    ;;#ASMSTART2714; GFX90A-NEXT:    ; use s82715; GFX90A-NEXT:    ;;#ASMEND2716; GFX90A-NEXT:    s_setpc_b64 s[30:31]2717;2718; GFX942-LABEL: s_shuffle_v2f16_v3f16__5_5:2719; GFX942:       ; %bb.0:2720; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2721; GFX942-NEXT:    ;;#ASMSTART2722; GFX942-NEXT:    ; def s[0:1]2723; GFX942-NEXT:    ;;#ASMEND2724; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s12725; GFX942-NEXT:    ;;#ASMSTART2726; GFX942-NEXT:    ; use s82727; GFX942-NEXT:    ;;#ASMEND2728; GFX942-NEXT:    s_setpc_b64 s[30:31]2729  %vec0 = call <4 x half> asm "; def $0", "=s"()2730  %vec1 = call <4 x half> asm "; def $0", "=s"()2731  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2732  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2733  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 5, i32 5>2734  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2735  ret void2736}2737 2738define void @s_shuffle_v2f16_v3f16__u_0() {2739; GFX900-LABEL: s_shuffle_v2f16_v3f16__u_0:2740; GFX900:       ; %bb.0:2741; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2742; GFX900-NEXT:    ;;#ASMSTART2743; GFX900-NEXT:    ; def s[4:5]2744; GFX900-NEXT:    ;;#ASMEND2745; GFX900-NEXT:    s_lshl_b32 s8, s4, 162746; GFX900-NEXT:    ;;#ASMSTART2747; GFX900-NEXT:    ; use s82748; GFX900-NEXT:    ;;#ASMEND2749; GFX900-NEXT:    s_setpc_b64 s[30:31]2750;2751; GFX90A-LABEL: s_shuffle_v2f16_v3f16__u_0:2752; GFX90A:       ; %bb.0:2753; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2754; GFX90A-NEXT:    ;;#ASMSTART2755; GFX90A-NEXT:    ; def s[4:5]2756; GFX90A-NEXT:    ;;#ASMEND2757; GFX90A-NEXT:    s_lshl_b32 s8, s4, 162758; GFX90A-NEXT:    ;;#ASMSTART2759; GFX90A-NEXT:    ; use s82760; GFX90A-NEXT:    ;;#ASMEND2761; GFX90A-NEXT:    s_setpc_b64 s[30:31]2762;2763; GFX942-LABEL: s_shuffle_v2f16_v3f16__u_0:2764; GFX942:       ; %bb.0:2765; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2766; GFX942-NEXT:    ;;#ASMSTART2767; GFX942-NEXT:    ; def s[0:1]2768; GFX942-NEXT:    ;;#ASMEND2769; GFX942-NEXT:    s_lshl_b32 s8, s0, 162770; GFX942-NEXT:    ;;#ASMSTART2771; GFX942-NEXT:    ; use s82772; GFX942-NEXT:    ;;#ASMEND2773; GFX942-NEXT:    s_setpc_b64 s[30:31]2774  %vec0 = call <4 x half> asm "; def $0", "=s"()2775  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2776  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 0>2777  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2778  ret void2779}2780 2781define void @s_shuffle_v2f16_v3f16__0_0() {2782; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_0:2783; GFX900:       ; %bb.0:2784; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2785; GFX900-NEXT:    ;;#ASMSTART2786; GFX900-NEXT:    ; def s[4:5]2787; GFX900-NEXT:    ;;#ASMEND2788; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s42789; GFX900-NEXT:    ;;#ASMSTART2790; GFX900-NEXT:    ; use s82791; GFX900-NEXT:    ;;#ASMEND2792; GFX900-NEXT:    s_setpc_b64 s[30:31]2793;2794; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_0:2795; GFX90A:       ; %bb.0:2796; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2797; GFX90A-NEXT:    ;;#ASMSTART2798; GFX90A-NEXT:    ; def s[4:5]2799; GFX90A-NEXT:    ;;#ASMEND2800; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s42801; GFX90A-NEXT:    ;;#ASMSTART2802; GFX90A-NEXT:    ; use s82803; GFX90A-NEXT:    ;;#ASMEND2804; GFX90A-NEXT:    s_setpc_b64 s[30:31]2805;2806; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_0:2807; GFX942:       ; %bb.0:2808; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2809; GFX942-NEXT:    ;;#ASMSTART2810; GFX942-NEXT:    ; def s[0:1]2811; GFX942-NEXT:    ;;#ASMEND2812; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s02813; GFX942-NEXT:    ;;#ASMSTART2814; GFX942-NEXT:    ; use s82815; GFX942-NEXT:    ;;#ASMEND2816; GFX942-NEXT:    s_setpc_b64 s[30:31]2817  %vec0 = call <4 x half> asm "; def $0", "=s"()2818  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2819  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> zeroinitializer2820  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2821  ret void2822}2823 2824define void @s_shuffle_v2f16_v3f16__1_0() {2825; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_0:2826; GFX900:       ; %bb.0:2827; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2828; GFX900-NEXT:    ;;#ASMSTART2829; GFX900-NEXT:    ; def s[4:5]2830; GFX900-NEXT:    ;;#ASMEND2831; GFX900-NEXT:    s_lshr_b32 s5, s4, 162832; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s42833; GFX900-NEXT:    ;;#ASMSTART2834; GFX900-NEXT:    ; use s82835; GFX900-NEXT:    ;;#ASMEND2836; GFX900-NEXT:    s_setpc_b64 s[30:31]2837;2838; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_0:2839; GFX90A:       ; %bb.0:2840; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2841; GFX90A-NEXT:    ;;#ASMSTART2842; GFX90A-NEXT:    ; def s[4:5]2843; GFX90A-NEXT:    ;;#ASMEND2844; GFX90A-NEXT:    s_lshr_b32 s5, s4, 162845; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s42846; GFX90A-NEXT:    ;;#ASMSTART2847; GFX90A-NEXT:    ; use s82848; GFX90A-NEXT:    ;;#ASMEND2849; GFX90A-NEXT:    s_setpc_b64 s[30:31]2850;2851; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_0:2852; GFX942:       ; %bb.0:2853; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2854; GFX942-NEXT:    ;;#ASMSTART2855; GFX942-NEXT:    ; def s[0:1]2856; GFX942-NEXT:    ;;#ASMEND2857; GFX942-NEXT:    s_lshr_b32 s1, s0, 162858; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s02859; GFX942-NEXT:    ;;#ASMSTART2860; GFX942-NEXT:    ; use s82861; GFX942-NEXT:    ;;#ASMEND2862; GFX942-NEXT:    s_setpc_b64 s[30:31]2863  %vec0 = call <4 x half> asm "; def $0", "=s"()2864  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2865  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 0>2866  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2867  ret void2868}2869 2870define void @s_shuffle_v2f16_v3f16__2_0() {2871; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_0:2872; GFX900:       ; %bb.0:2873; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2874; GFX900-NEXT:    ;;#ASMSTART2875; GFX900-NEXT:    ; def s[4:5]2876; GFX900-NEXT:    ;;#ASMEND2877; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s42878; GFX900-NEXT:    ;;#ASMSTART2879; GFX900-NEXT:    ; use s82880; GFX900-NEXT:    ;;#ASMEND2881; GFX900-NEXT:    s_setpc_b64 s[30:31]2882;2883; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_0:2884; GFX90A:       ; %bb.0:2885; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2886; GFX90A-NEXT:    ;;#ASMSTART2887; GFX90A-NEXT:    ; def s[4:5]2888; GFX90A-NEXT:    ;;#ASMEND2889; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s42890; GFX90A-NEXT:    ;;#ASMSTART2891; GFX90A-NEXT:    ; use s82892; GFX90A-NEXT:    ;;#ASMEND2893; GFX90A-NEXT:    s_setpc_b64 s[30:31]2894;2895; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_0:2896; GFX942:       ; %bb.0:2897; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2898; GFX942-NEXT:    ;;#ASMSTART2899; GFX942-NEXT:    ; def s[0:1]2900; GFX942-NEXT:    ;;#ASMEND2901; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s02902; GFX942-NEXT:    ;;#ASMSTART2903; GFX942-NEXT:    ; use s82904; GFX942-NEXT:    ;;#ASMEND2905; GFX942-NEXT:    s_setpc_b64 s[30:31]2906  %vec0 = call <4 x half> asm "; def $0", "=s"()2907  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2908  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 0>2909  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2910  ret void2911}2912 2913define void @s_shuffle_v2f16_v3f16__3_0() {2914; GFX900-LABEL: s_shuffle_v2f16_v3f16__3_0:2915; GFX900:       ; %bb.0:2916; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2917; GFX900-NEXT:    ;;#ASMSTART2918; GFX900-NEXT:    ; def s[4:5]2919; GFX900-NEXT:    ;;#ASMEND2920; GFX900-NEXT:    s_lshl_b32 s8, s4, 162921; GFX900-NEXT:    ;;#ASMSTART2922; GFX900-NEXT:    ; use s82923; GFX900-NEXT:    ;;#ASMEND2924; GFX900-NEXT:    s_setpc_b64 s[30:31]2925;2926; GFX90A-LABEL: s_shuffle_v2f16_v3f16__3_0:2927; GFX90A:       ; %bb.0:2928; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2929; GFX90A-NEXT:    ;;#ASMSTART2930; GFX90A-NEXT:    ; def s[4:5]2931; GFX90A-NEXT:    ;;#ASMEND2932; GFX90A-NEXT:    s_lshl_b32 s8, s4, 162933; GFX90A-NEXT:    ;;#ASMSTART2934; GFX90A-NEXT:    ; use s82935; GFX90A-NEXT:    ;;#ASMEND2936; GFX90A-NEXT:    s_setpc_b64 s[30:31]2937;2938; GFX942-LABEL: s_shuffle_v2f16_v3f16__3_0:2939; GFX942:       ; %bb.0:2940; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2941; GFX942-NEXT:    ;;#ASMSTART2942; GFX942-NEXT:    ; def s[0:1]2943; GFX942-NEXT:    ;;#ASMEND2944; GFX942-NEXT:    s_lshl_b32 s8, s0, 162945; GFX942-NEXT:    ;;#ASMSTART2946; GFX942-NEXT:    ; use s82947; GFX942-NEXT:    ;;#ASMEND2948; GFX942-NEXT:    s_setpc_b64 s[30:31]2949  %vec0 = call <4 x half> asm "; def $0", "=s"()2950  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2951  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 0>2952  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)2953  ret void2954}2955 2956define void @s_shuffle_v2f16_v3f16__4_0() {2957; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_0:2958; GFX900:       ; %bb.0:2959; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2960; GFX900-NEXT:    ;;#ASMSTART2961; GFX900-NEXT:    ; def s[4:5]2962; GFX900-NEXT:    ;;#ASMEND2963; GFX900-NEXT:    ;;#ASMSTART2964; GFX900-NEXT:    ; def s[6:7]2965; GFX900-NEXT:    ;;#ASMEND2966; GFX900-NEXT:    s_lshr_b32 s5, s6, 162967; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s42968; GFX900-NEXT:    ;;#ASMSTART2969; GFX900-NEXT:    ; use s82970; GFX900-NEXT:    ;;#ASMEND2971; GFX900-NEXT:    s_setpc_b64 s[30:31]2972;2973; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_0:2974; GFX90A:       ; %bb.0:2975; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2976; GFX90A-NEXT:    ;;#ASMSTART2977; GFX90A-NEXT:    ; def s[4:5]2978; GFX90A-NEXT:    ;;#ASMEND2979; GFX90A-NEXT:    ;;#ASMSTART2980; GFX90A-NEXT:    ; def s[6:7]2981; GFX90A-NEXT:    ;;#ASMEND2982; GFX90A-NEXT:    s_lshr_b32 s5, s6, 162983; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s42984; GFX90A-NEXT:    ;;#ASMSTART2985; GFX90A-NEXT:    ; use s82986; GFX90A-NEXT:    ;;#ASMEND2987; GFX90A-NEXT:    s_setpc_b64 s[30:31]2988;2989; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_0:2990; GFX942:       ; %bb.0:2991; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2992; GFX942-NEXT:    ;;#ASMSTART2993; GFX942-NEXT:    ; def s[0:1]2994; GFX942-NEXT:    ;;#ASMEND2995; GFX942-NEXT:    ;;#ASMSTART2996; GFX942-NEXT:    ; def s[2:3]2997; GFX942-NEXT:    ;;#ASMEND2998; GFX942-NEXT:    s_lshr_b32 s1, s2, 162999; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s03000; GFX942-NEXT:    ;;#ASMSTART3001; GFX942-NEXT:    ; use s83002; GFX942-NEXT:    ;;#ASMEND3003; GFX942-NEXT:    s_setpc_b64 s[30:31]3004  %vec0 = call <4 x half> asm "; def $0", "=s"()3005  %vec1 = call <4 x half> asm "; def $0", "=s"()3006  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3007  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3008  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 0>3009  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3010  ret void3011}3012 3013define void @s_shuffle_v2f16_v3f16__u_1() {3014; GFX900-LABEL: s_shuffle_v2f16_v3f16__u_1:3015; GFX900:       ; %bb.0:3016; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3017; GFX900-NEXT:    ;;#ASMSTART3018; GFX900-NEXT:    ; def s[8:9]3019; GFX900-NEXT:    ;;#ASMEND3020; GFX900-NEXT:    ;;#ASMSTART3021; GFX900-NEXT:    ; use s83022; GFX900-NEXT:    ;;#ASMEND3023; GFX900-NEXT:    s_setpc_b64 s[30:31]3024;3025; GFX90A-LABEL: s_shuffle_v2f16_v3f16__u_1:3026; GFX90A:       ; %bb.0:3027; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3028; GFX90A-NEXT:    ;;#ASMSTART3029; GFX90A-NEXT:    ; def s[8:9]3030; GFX90A-NEXT:    ;;#ASMEND3031; GFX90A-NEXT:    ;;#ASMSTART3032; GFX90A-NEXT:    ; use s83033; GFX90A-NEXT:    ;;#ASMEND3034; GFX90A-NEXT:    s_setpc_b64 s[30:31]3035;3036; GFX942-LABEL: s_shuffle_v2f16_v3f16__u_1:3037; GFX942:       ; %bb.0:3038; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3039; GFX942-NEXT:    ;;#ASMSTART3040; GFX942-NEXT:    ; def s[8:9]3041; GFX942-NEXT:    ;;#ASMEND3042; GFX942-NEXT:    s_nop 03043; GFX942-NEXT:    ;;#ASMSTART3044; GFX942-NEXT:    ; use s83045; GFX942-NEXT:    ;;#ASMEND3046; GFX942-NEXT:    s_setpc_b64 s[30:31]3047  %vec0 = call <4 x half> asm "; def $0", "=s"()3048  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3049  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 1>3050  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3051  ret void3052}3053 3054define void @s_shuffle_v2f16_v3f16__0_1() {3055; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_1:3056; GFX900:       ; %bb.0:3057; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3058; GFX900-NEXT:    ;;#ASMSTART3059; GFX900-NEXT:    ; def s[8:9]3060; GFX900-NEXT:    ;;#ASMEND3061; GFX900-NEXT:    ;;#ASMSTART3062; GFX900-NEXT:    ; use s83063; GFX900-NEXT:    ;;#ASMEND3064; GFX900-NEXT:    s_setpc_b64 s[30:31]3065;3066; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_1:3067; GFX90A:       ; %bb.0:3068; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3069; GFX90A-NEXT:    ;;#ASMSTART3070; GFX90A-NEXT:    ; def s[8:9]3071; GFX90A-NEXT:    ;;#ASMEND3072; GFX90A-NEXT:    ;;#ASMSTART3073; GFX90A-NEXT:    ; use s83074; GFX90A-NEXT:    ;;#ASMEND3075; GFX90A-NEXT:    s_setpc_b64 s[30:31]3076;3077; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_1:3078; GFX942:       ; %bb.0:3079; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3080; GFX942-NEXT:    ;;#ASMSTART3081; GFX942-NEXT:    ; def s[8:9]3082; GFX942-NEXT:    ;;#ASMEND3083; GFX942-NEXT:    s_nop 03084; GFX942-NEXT:    ;;#ASMSTART3085; GFX942-NEXT:    ; use s83086; GFX942-NEXT:    ;;#ASMEND3087; GFX942-NEXT:    s_setpc_b64 s[30:31]3088  %vec0 = call <4 x half> asm "; def $0", "=s"()3089  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3090  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 1>3091  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3092  ret void3093}3094 3095define void @s_shuffle_v2f16_v3f16__1_1() {3096; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_1:3097; GFX900:       ; %bb.0:3098; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3099; GFX900-NEXT:    ;;#ASMSTART3100; GFX900-NEXT:    ; def s[4:5]3101; GFX900-NEXT:    ;;#ASMEND3102; GFX900-NEXT:    s_lshr_b32 s4, s4, 163103; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s43104; GFX900-NEXT:    ;;#ASMSTART3105; GFX900-NEXT:    ; use s83106; GFX900-NEXT:    ;;#ASMEND3107; GFX900-NEXT:    s_setpc_b64 s[30:31]3108;3109; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_1:3110; GFX90A:       ; %bb.0:3111; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3112; GFX90A-NEXT:    ;;#ASMSTART3113; GFX90A-NEXT:    ; def s[4:5]3114; GFX90A-NEXT:    ;;#ASMEND3115; GFX90A-NEXT:    s_lshr_b32 s4, s4, 163116; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s43117; GFX90A-NEXT:    ;;#ASMSTART3118; GFX90A-NEXT:    ; use s83119; GFX90A-NEXT:    ;;#ASMEND3120; GFX90A-NEXT:    s_setpc_b64 s[30:31]3121;3122; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_1:3123; GFX942:       ; %bb.0:3124; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3125; GFX942-NEXT:    ;;#ASMSTART3126; GFX942-NEXT:    ; def s[0:1]3127; GFX942-NEXT:    ;;#ASMEND3128; GFX942-NEXT:    s_lshr_b32 s0, s0, 163129; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s03130; GFX942-NEXT:    ;;#ASMSTART3131; GFX942-NEXT:    ; use s83132; GFX942-NEXT:    ;;#ASMEND3133; GFX942-NEXT:    s_setpc_b64 s[30:31]3134  %vec0 = call <4 x half> asm "; def $0", "=s"()3135  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3136  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 1>3137  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3138  ret void3139}3140 3141define void @s_shuffle_v2f16_v3f16__2_1() {3142; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_1:3143; GFX900:       ; %bb.0:3144; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3145; GFX900-NEXT:    ;;#ASMSTART3146; GFX900-NEXT:    ; def s[4:5]3147; GFX900-NEXT:    ;;#ASMEND3148; GFX900-NEXT:    s_lshr_b32 s4, s4, 163149; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s43150; GFX900-NEXT:    ;;#ASMSTART3151; GFX900-NEXT:    ; use s83152; GFX900-NEXT:    ;;#ASMEND3153; GFX900-NEXT:    s_setpc_b64 s[30:31]3154;3155; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_1:3156; GFX90A:       ; %bb.0:3157; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3158; GFX90A-NEXT:    ;;#ASMSTART3159; GFX90A-NEXT:    ; def s[4:5]3160; GFX90A-NEXT:    ;;#ASMEND3161; GFX90A-NEXT:    s_lshr_b32 s4, s4, 163162; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s43163; GFX90A-NEXT:    ;;#ASMSTART3164; GFX90A-NEXT:    ; use s83165; GFX90A-NEXT:    ;;#ASMEND3166; GFX90A-NEXT:    s_setpc_b64 s[30:31]3167;3168; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_1:3169; GFX942:       ; %bb.0:3170; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3171; GFX942-NEXT:    ;;#ASMSTART3172; GFX942-NEXT:    ; def s[0:1]3173; GFX942-NEXT:    ;;#ASMEND3174; GFX942-NEXT:    s_lshr_b32 s0, s0, 163175; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s03176; GFX942-NEXT:    ;;#ASMSTART3177; GFX942-NEXT:    ; use s83178; GFX942-NEXT:    ;;#ASMEND3179; GFX942-NEXT:    s_setpc_b64 s[30:31]3180  %vec0 = call <4 x half> asm "; def $0", "=s"()3181  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3182  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 1>3183  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3184  ret void3185}3186 3187define void @s_shuffle_v2f16_v3f16__3_1() {3188; GFX900-LABEL: s_shuffle_v2f16_v3f16__3_1:3189; GFX900:       ; %bb.0:3190; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3191; GFX900-NEXT:    ;;#ASMSTART3192; GFX900-NEXT:    ; def s[8:9]3193; GFX900-NEXT:    ;;#ASMEND3194; GFX900-NEXT:    ;;#ASMSTART3195; GFX900-NEXT:    ; use s83196; GFX900-NEXT:    ;;#ASMEND3197; GFX900-NEXT:    s_setpc_b64 s[30:31]3198;3199; GFX90A-LABEL: s_shuffle_v2f16_v3f16__3_1:3200; GFX90A:       ; %bb.0:3201; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3202; GFX90A-NEXT:    ;;#ASMSTART3203; GFX90A-NEXT:    ; def s[8:9]3204; GFX90A-NEXT:    ;;#ASMEND3205; GFX90A-NEXT:    ;;#ASMSTART3206; GFX90A-NEXT:    ; use s83207; GFX90A-NEXT:    ;;#ASMEND3208; GFX90A-NEXT:    s_setpc_b64 s[30:31]3209;3210; GFX942-LABEL: s_shuffle_v2f16_v3f16__3_1:3211; GFX942:       ; %bb.0:3212; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3213; GFX942-NEXT:    ;;#ASMSTART3214; GFX942-NEXT:    ; def s[8:9]3215; GFX942-NEXT:    ;;#ASMEND3216; GFX942-NEXT:    s_nop 03217; GFX942-NEXT:    ;;#ASMSTART3218; GFX942-NEXT:    ; use s83219; GFX942-NEXT:    ;;#ASMEND3220; GFX942-NEXT:    s_setpc_b64 s[30:31]3221  %vec0 = call <4 x half> asm "; def $0", "=s"()3222  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3223  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 1>3224  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3225  ret void3226}3227 3228define void @s_shuffle_v2f16_v3f16__4_1() {3229; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_1:3230; GFX900:       ; %bb.0:3231; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3232; GFX900-NEXT:    ;;#ASMSTART3233; GFX900-NEXT:    ; def s[4:5]3234; GFX900-NEXT:    ;;#ASMEND3235; GFX900-NEXT:    ;;#ASMSTART3236; GFX900-NEXT:    ; def s[6:7]3237; GFX900-NEXT:    ;;#ASMEND3238; GFX900-NEXT:    s_lshr_b32 s4, s4, 163239; GFX900-NEXT:    s_lshr_b32 s5, s6, 163240; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s43241; GFX900-NEXT:    ;;#ASMSTART3242; GFX900-NEXT:    ; use s83243; GFX900-NEXT:    ;;#ASMEND3244; GFX900-NEXT:    s_setpc_b64 s[30:31]3245;3246; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_1:3247; GFX90A:       ; %bb.0:3248; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3249; GFX90A-NEXT:    ;;#ASMSTART3250; GFX90A-NEXT:    ; def s[4:5]3251; GFX90A-NEXT:    ;;#ASMEND3252; GFX90A-NEXT:    ;;#ASMSTART3253; GFX90A-NEXT:    ; def s[6:7]3254; GFX90A-NEXT:    ;;#ASMEND3255; GFX90A-NEXT:    s_lshr_b32 s4, s4, 163256; GFX90A-NEXT:    s_lshr_b32 s5, s6, 163257; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s43258; GFX90A-NEXT:    ;;#ASMSTART3259; GFX90A-NEXT:    ; use s83260; GFX90A-NEXT:    ;;#ASMEND3261; GFX90A-NEXT:    s_setpc_b64 s[30:31]3262;3263; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_1:3264; GFX942:       ; %bb.0:3265; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX942-NEXT:    ;;#ASMSTART3267; GFX942-NEXT:    ; def s[0:1]3268; GFX942-NEXT:    ;;#ASMEND3269; GFX942-NEXT:    ;;#ASMSTART3270; GFX942-NEXT:    ; def s[2:3]3271; GFX942-NEXT:    ;;#ASMEND3272; GFX942-NEXT:    s_lshr_b32 s0, s0, 163273; GFX942-NEXT:    s_lshr_b32 s1, s2, 163274; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s03275; GFX942-NEXT:    ;;#ASMSTART3276; GFX942-NEXT:    ; use s83277; GFX942-NEXT:    ;;#ASMEND3278; GFX942-NEXT:    s_setpc_b64 s[30:31]3279  %vec0 = call <4 x half> asm "; def $0", "=s"()3280  %vec1 = call <4 x half> asm "; def $0", "=s"()3281  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3282  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3283  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 1>3284  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3285  ret void3286}3287 3288define void @s_shuffle_v2f16_v3f16__u_2() {3289; GFX900-LABEL: s_shuffle_v2f16_v3f16__u_2:3290; GFX900:       ; %bb.0:3291; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3292; GFX900-NEXT:    ;;#ASMSTART3293; GFX900-NEXT:    ; def s[4:5]3294; GFX900-NEXT:    ;;#ASMEND3295; GFX900-NEXT:    s_lshl_b32 s8, s5, 163296; GFX900-NEXT:    ;;#ASMSTART3297; GFX900-NEXT:    ; use s83298; GFX900-NEXT:    ;;#ASMEND3299; GFX900-NEXT:    s_setpc_b64 s[30:31]3300;3301; GFX90A-LABEL: s_shuffle_v2f16_v3f16__u_2:3302; GFX90A:       ; %bb.0:3303; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3304; GFX90A-NEXT:    ;;#ASMSTART3305; GFX90A-NEXT:    ; def s[4:5]3306; GFX90A-NEXT:    ;;#ASMEND3307; GFX90A-NEXT:    s_lshl_b32 s8, s5, 163308; GFX90A-NEXT:    ;;#ASMSTART3309; GFX90A-NEXT:    ; use s83310; GFX90A-NEXT:    ;;#ASMEND3311; GFX90A-NEXT:    s_setpc_b64 s[30:31]3312;3313; GFX942-LABEL: s_shuffle_v2f16_v3f16__u_2:3314; GFX942:       ; %bb.0:3315; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3316; GFX942-NEXT:    ;;#ASMSTART3317; GFX942-NEXT:    ; def s[0:1]3318; GFX942-NEXT:    ;;#ASMEND3319; GFX942-NEXT:    s_lshl_b32 s8, s1, 163320; GFX942-NEXT:    ;;#ASMSTART3321; GFX942-NEXT:    ; use s83322; GFX942-NEXT:    ;;#ASMEND3323; GFX942-NEXT:    s_setpc_b64 s[30:31]3324  %vec0 = call <4 x half> asm "; def $0", "=s"()3325  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3326  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 2>3327  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3328  ret void3329}3330 3331define void @s_shuffle_v2f16_v3f16__0_2() {3332; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_2:3333; GFX900:       ; %bb.0:3334; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3335; GFX900-NEXT:    ;;#ASMSTART3336; GFX900-NEXT:    ; def s[4:5]3337; GFX900-NEXT:    ;;#ASMEND3338; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s53339; GFX900-NEXT:    ;;#ASMSTART3340; GFX900-NEXT:    ; use s83341; GFX900-NEXT:    ;;#ASMEND3342; GFX900-NEXT:    s_setpc_b64 s[30:31]3343;3344; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_2:3345; GFX90A:       ; %bb.0:3346; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3347; GFX90A-NEXT:    ;;#ASMSTART3348; GFX90A-NEXT:    ; def s[4:5]3349; GFX90A-NEXT:    ;;#ASMEND3350; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s53351; GFX90A-NEXT:    ;;#ASMSTART3352; GFX90A-NEXT:    ; use s83353; GFX90A-NEXT:    ;;#ASMEND3354; GFX90A-NEXT:    s_setpc_b64 s[30:31]3355;3356; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_2:3357; GFX942:       ; %bb.0:3358; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3359; GFX942-NEXT:    ;;#ASMSTART3360; GFX942-NEXT:    ; def s[0:1]3361; GFX942-NEXT:    ;;#ASMEND3362; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s13363; GFX942-NEXT:    ;;#ASMSTART3364; GFX942-NEXT:    ; use s83365; GFX942-NEXT:    ;;#ASMEND3366; GFX942-NEXT:    s_setpc_b64 s[30:31]3367  %vec0 = call <4 x half> asm "; def $0", "=s"()3368  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3369  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 2>3370  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3371  ret void3372}3373 3374define void @s_shuffle_v2f16_v3f16__1_2() {3375; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_2:3376; GFX900:       ; %bb.0:3377; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3378; GFX900-NEXT:    ;;#ASMSTART3379; GFX900-NEXT:    ; def s[4:5]3380; GFX900-NEXT:    ;;#ASMEND3381; GFX900-NEXT:    s_lshr_b32 s4, s4, 163382; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s53383; GFX900-NEXT:    ;;#ASMSTART3384; GFX900-NEXT:    ; use s83385; GFX900-NEXT:    ;;#ASMEND3386; GFX900-NEXT:    s_setpc_b64 s[30:31]3387;3388; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_2:3389; GFX90A:       ; %bb.0:3390; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3391; GFX90A-NEXT:    ;;#ASMSTART3392; GFX90A-NEXT:    ; def s[4:5]3393; GFX90A-NEXT:    ;;#ASMEND3394; GFX90A-NEXT:    s_lshr_b32 s4, s4, 163395; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s53396; GFX90A-NEXT:    ;;#ASMSTART3397; GFX90A-NEXT:    ; use s83398; GFX90A-NEXT:    ;;#ASMEND3399; GFX90A-NEXT:    s_setpc_b64 s[30:31]3400;3401; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_2:3402; GFX942:       ; %bb.0:3403; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3404; GFX942-NEXT:    ;;#ASMSTART3405; GFX942-NEXT:    ; def s[0:1]3406; GFX942-NEXT:    ;;#ASMEND3407; GFX942-NEXT:    s_lshr_b32 s0, s0, 163408; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s13409; GFX942-NEXT:    ;;#ASMSTART3410; GFX942-NEXT:    ; use s83411; GFX942-NEXT:    ;;#ASMEND3412; GFX942-NEXT:    s_setpc_b64 s[30:31]3413  %vec0 = call <4 x half> asm "; def $0", "=s"()3414  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3415  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 2>3416  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3417  ret void3418}3419 3420define void @s_shuffle_v2f16_v3f16__2_2() {3421; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_2:3422; GFX900:       ; %bb.0:3423; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3424; GFX900-NEXT:    ;;#ASMSTART3425; GFX900-NEXT:    ; def s[4:5]3426; GFX900-NEXT:    ;;#ASMEND3427; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s53428; GFX900-NEXT:    ;;#ASMSTART3429; GFX900-NEXT:    ; use s83430; GFX900-NEXT:    ;;#ASMEND3431; GFX900-NEXT:    s_setpc_b64 s[30:31]3432;3433; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_2:3434; GFX90A:       ; %bb.0:3435; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3436; GFX90A-NEXT:    ;;#ASMSTART3437; GFX90A-NEXT:    ; def s[4:5]3438; GFX90A-NEXT:    ;;#ASMEND3439; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s53440; GFX90A-NEXT:    ;;#ASMSTART3441; GFX90A-NEXT:    ; use s83442; GFX90A-NEXT:    ;;#ASMEND3443; GFX90A-NEXT:    s_setpc_b64 s[30:31]3444;3445; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_2:3446; GFX942:       ; %bb.0:3447; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3448; GFX942-NEXT:    ;;#ASMSTART3449; GFX942-NEXT:    ; def s[0:1]3450; GFX942-NEXT:    ;;#ASMEND3451; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s13452; GFX942-NEXT:    ;;#ASMSTART3453; GFX942-NEXT:    ; use s83454; GFX942-NEXT:    ;;#ASMEND3455; GFX942-NEXT:    s_setpc_b64 s[30:31]3456  %vec0 = call <4 x half> asm "; def $0", "=s"()3457  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3458  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 2>3459  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3460  ret void3461}3462 3463define void @s_shuffle_v2f16_v3f16__3_2() {3464; GFX900-LABEL: s_shuffle_v2f16_v3f16__3_2:3465; GFX900:       ; %bb.0:3466; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3467; GFX900-NEXT:    ;;#ASMSTART3468; GFX900-NEXT:    ; def s[4:5]3469; GFX900-NEXT:    ;;#ASMEND3470; GFX900-NEXT:    s_lshl_b32 s8, s5, 163471; GFX900-NEXT:    ;;#ASMSTART3472; GFX900-NEXT:    ; use s83473; GFX900-NEXT:    ;;#ASMEND3474; GFX900-NEXT:    s_setpc_b64 s[30:31]3475;3476; GFX90A-LABEL: s_shuffle_v2f16_v3f16__3_2:3477; GFX90A:       ; %bb.0:3478; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3479; GFX90A-NEXT:    ;;#ASMSTART3480; GFX90A-NEXT:    ; def s[4:5]3481; GFX90A-NEXT:    ;;#ASMEND3482; GFX90A-NEXT:    s_lshl_b32 s8, s5, 163483; GFX90A-NEXT:    ;;#ASMSTART3484; GFX90A-NEXT:    ; use s83485; GFX90A-NEXT:    ;;#ASMEND3486; GFX90A-NEXT:    s_setpc_b64 s[30:31]3487;3488; GFX942-LABEL: s_shuffle_v2f16_v3f16__3_2:3489; GFX942:       ; %bb.0:3490; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3491; GFX942-NEXT:    ;;#ASMSTART3492; GFX942-NEXT:    ; def s[0:1]3493; GFX942-NEXT:    ;;#ASMEND3494; GFX942-NEXT:    s_lshl_b32 s8, s1, 163495; GFX942-NEXT:    ;;#ASMSTART3496; GFX942-NEXT:    ; use s83497; GFX942-NEXT:    ;;#ASMEND3498; GFX942-NEXT:    s_setpc_b64 s[30:31]3499  %vec0 = call <4 x half> asm "; def $0", "=s"()3500  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3501  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 2>3502  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3503  ret void3504}3505 3506define void @s_shuffle_v2f16_v3f16__4_2() {3507; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_2:3508; GFX900:       ; %bb.0:3509; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3510; GFX900-NEXT:    ;;#ASMSTART3511; GFX900-NEXT:    ; def s[4:5]3512; GFX900-NEXT:    ;;#ASMEND3513; GFX900-NEXT:    ;;#ASMSTART3514; GFX900-NEXT:    ; def s[6:7]3515; GFX900-NEXT:    ;;#ASMEND3516; GFX900-NEXT:    s_lshr_b32 s4, s6, 163517; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s53518; GFX900-NEXT:    ;;#ASMSTART3519; GFX900-NEXT:    ; use s83520; GFX900-NEXT:    ;;#ASMEND3521; GFX900-NEXT:    s_setpc_b64 s[30:31]3522;3523; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_2:3524; GFX90A:       ; %bb.0:3525; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3526; GFX90A-NEXT:    ;;#ASMSTART3527; GFX90A-NEXT:    ; def s[4:5]3528; GFX90A-NEXT:    ;;#ASMEND3529; GFX90A-NEXT:    ;;#ASMSTART3530; GFX90A-NEXT:    ; def s[6:7]3531; GFX90A-NEXT:    ;;#ASMEND3532; GFX90A-NEXT:    s_lshr_b32 s4, s6, 163533; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s53534; GFX90A-NEXT:    ;;#ASMSTART3535; GFX90A-NEXT:    ; use s83536; GFX90A-NEXT:    ;;#ASMEND3537; GFX90A-NEXT:    s_setpc_b64 s[30:31]3538;3539; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_2:3540; GFX942:       ; %bb.0:3541; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3542; GFX942-NEXT:    ;;#ASMSTART3543; GFX942-NEXT:    ; def s[0:1]3544; GFX942-NEXT:    ;;#ASMEND3545; GFX942-NEXT:    ;;#ASMSTART3546; GFX942-NEXT:    ; def s[2:3]3547; GFX942-NEXT:    ;;#ASMEND3548; GFX942-NEXT:    s_lshr_b32 s0, s2, 163549; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s13550; GFX942-NEXT:    ;;#ASMSTART3551; GFX942-NEXT:    ; use s83552; GFX942-NEXT:    ;;#ASMEND3553; GFX942-NEXT:    s_setpc_b64 s[30:31]3554  %vec0 = call <4 x half> asm "; def $0", "=s"()3555  %vec1 = call <4 x half> asm "; def $0", "=s"()3556  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3557  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3558  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 2>3559  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3560  ret void3561}3562 3563define void @s_shuffle_v2f16_v3f16__u_3() {3564; GFX9-LABEL: s_shuffle_v2f16_v3f16__u_3:3565; GFX9:       ; %bb.0:3566; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3567; GFX9-NEXT:    ;;#ASMSTART3568; GFX9-NEXT:    ; use s83569; GFX9-NEXT:    ;;#ASMEND3570; GFX9-NEXT:    s_setpc_b64 s[30:31]3571  %vec0 = call <4 x half> asm "; def $0", "=s"()3572  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3573  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 poison, i32 3>3574  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3575  ret void3576}3577 3578define void @s_shuffle_v2f16_v3f16__0_3() {3579; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_3:3580; GFX900:       ; %bb.0:3581; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3582; GFX900-NEXT:    ;;#ASMSTART3583; GFX900-NEXT:    ; def s[8:9]3584; GFX900-NEXT:    ;;#ASMEND3585; GFX900-NEXT:    ;;#ASMSTART3586; GFX900-NEXT:    ; use s83587; GFX900-NEXT:    ;;#ASMEND3588; GFX900-NEXT:    s_setpc_b64 s[30:31]3589;3590; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_3:3591; GFX90A:       ; %bb.0:3592; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3593; GFX90A-NEXT:    ;;#ASMSTART3594; GFX90A-NEXT:    ; def s[8:9]3595; GFX90A-NEXT:    ;;#ASMEND3596; GFX90A-NEXT:    ;;#ASMSTART3597; GFX90A-NEXT:    ; use s83598; GFX90A-NEXT:    ;;#ASMEND3599; GFX90A-NEXT:    s_setpc_b64 s[30:31]3600;3601; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_3:3602; GFX942:       ; %bb.0:3603; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3604; GFX942-NEXT:    ;;#ASMSTART3605; GFX942-NEXT:    ; def s[8:9]3606; GFX942-NEXT:    ;;#ASMEND3607; GFX942-NEXT:    s_nop 03608; GFX942-NEXT:    ;;#ASMSTART3609; GFX942-NEXT:    ; use s83610; GFX942-NEXT:    ;;#ASMEND3611; GFX942-NEXT:    s_setpc_b64 s[30:31]3612  %vec0 = call <4 x half> asm "; def $0", "=s"()3613  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3614  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 0, i32 3>3615  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3616  ret void3617}3618 3619define void @s_shuffle_v2f16_v3f16__1_3() {3620; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_3:3621; GFX900:       ; %bb.0:3622; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3623; GFX900-NEXT:    ;;#ASMSTART3624; GFX900-NEXT:    ; def s[4:5]3625; GFX900-NEXT:    ;;#ASMEND3626; GFX900-NEXT:    s_lshr_b32 s8, s4, 163627; GFX900-NEXT:    ;;#ASMSTART3628; GFX900-NEXT:    ; use s83629; GFX900-NEXT:    ;;#ASMEND3630; GFX900-NEXT:    s_setpc_b64 s[30:31]3631;3632; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_3:3633; GFX90A:       ; %bb.0:3634; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3635; GFX90A-NEXT:    ;;#ASMSTART3636; GFX90A-NEXT:    ; def s[4:5]3637; GFX90A-NEXT:    ;;#ASMEND3638; GFX90A-NEXT:    s_lshr_b32 s8, s4, 163639; GFX90A-NEXT:    ;;#ASMSTART3640; GFX90A-NEXT:    ; use s83641; GFX90A-NEXT:    ;;#ASMEND3642; GFX90A-NEXT:    s_setpc_b64 s[30:31]3643;3644; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_3:3645; GFX942:       ; %bb.0:3646; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3647; GFX942-NEXT:    ;;#ASMSTART3648; GFX942-NEXT:    ; def s[0:1]3649; GFX942-NEXT:    ;;#ASMEND3650; GFX942-NEXT:    s_lshr_b32 s8, s0, 163651; GFX942-NEXT:    ;;#ASMSTART3652; GFX942-NEXT:    ; use s83653; GFX942-NEXT:    ;;#ASMEND3654; GFX942-NEXT:    s_setpc_b64 s[30:31]3655  %vec0 = call <4 x half> asm "; def $0", "=s"()3656  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3657  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 1, i32 3>3658  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3659  ret void3660}3661 3662define void @s_shuffle_v2f16_v3f16__2_3() {3663; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_3:3664; GFX900:       ; %bb.0:3665; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3666; GFX900-NEXT:    ;;#ASMSTART3667; GFX900-NEXT:    ; def s[4:5]3668; GFX900-NEXT:    ;;#ASMEND3669; GFX900-NEXT:    s_mov_b32 s8, s53670; GFX900-NEXT:    ;;#ASMSTART3671; GFX900-NEXT:    ; use s83672; GFX900-NEXT:    ;;#ASMEND3673; GFX900-NEXT:    s_setpc_b64 s[30:31]3674;3675; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_3:3676; GFX90A:       ; %bb.0:3677; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3678; GFX90A-NEXT:    ;;#ASMSTART3679; GFX90A-NEXT:    ; def s[4:5]3680; GFX90A-NEXT:    ;;#ASMEND3681; GFX90A-NEXT:    s_mov_b32 s8, s53682; GFX90A-NEXT:    ;;#ASMSTART3683; GFX90A-NEXT:    ; use s83684; GFX90A-NEXT:    ;;#ASMEND3685; GFX90A-NEXT:    s_setpc_b64 s[30:31]3686;3687; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_3:3688; GFX942:       ; %bb.0:3689; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3690; GFX942-NEXT:    ;;#ASMSTART3691; GFX942-NEXT:    ; def s[0:1]3692; GFX942-NEXT:    ;;#ASMEND3693; GFX942-NEXT:    s_mov_b32 s8, s13694; GFX942-NEXT:    ;;#ASMSTART3695; GFX942-NEXT:    ; use s83696; GFX942-NEXT:    ;;#ASMEND3697; GFX942-NEXT:    s_setpc_b64 s[30:31]3698  %vec0 = call <4 x half> asm "; def $0", "=s"()3699  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3700  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 2, i32 3>3701  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3702  ret void3703}3704 3705define void @s_shuffle_v2f16_v3f16__3_3() {3706; GFX9-LABEL: s_shuffle_v2f16_v3f16__3_3:3707; GFX9:       ; %bb.0:3708; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3709; GFX9-NEXT:    ;;#ASMSTART3710; GFX9-NEXT:    ; use s83711; GFX9-NEXT:    ;;#ASMEND3712; GFX9-NEXT:    s_setpc_b64 s[30:31]3713  %vec0 = call <4 x half> asm "; def $0", "=s"()3714  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3715  %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <2 x i32> <i32 3, i32 3>3716  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3717  ret void3718}3719 3720define void @s_shuffle_v2f16_v3f16__4_3() {3721; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_3:3722; GFX900:       ; %bb.0:3723; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3724; GFX900-NEXT:    ;;#ASMSTART3725; GFX900-NEXT:    ; def s[4:5]3726; GFX900-NEXT:    ;;#ASMEND3727; GFX900-NEXT:    s_lshr_b32 s5, s4, 163728; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s43729; GFX900-NEXT:    ;;#ASMSTART3730; GFX900-NEXT:    ; use s83731; GFX900-NEXT:    ;;#ASMEND3732; GFX900-NEXT:    s_setpc_b64 s[30:31]3733;3734; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_3:3735; GFX90A:       ; %bb.0:3736; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3737; GFX90A-NEXT:    ;;#ASMSTART3738; GFX90A-NEXT:    ; def s[4:5]3739; GFX90A-NEXT:    ;;#ASMEND3740; GFX90A-NEXT:    s_lshr_b32 s5, s4, 163741; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s43742; GFX90A-NEXT:    ;;#ASMSTART3743; GFX90A-NEXT:    ; use s83744; GFX90A-NEXT:    ;;#ASMEND3745; GFX90A-NEXT:    s_setpc_b64 s[30:31]3746;3747; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_3:3748; GFX942:       ; %bb.0:3749; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3750; GFX942-NEXT:    ;;#ASMSTART3751; GFX942-NEXT:    ; def s[0:1]3752; GFX942-NEXT:    ;;#ASMEND3753; GFX942-NEXT:    s_lshr_b32 s1, s0, 163754; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s03755; GFX942-NEXT:    ;;#ASMSTART3756; GFX942-NEXT:    ; use s83757; GFX942-NEXT:    ;;#ASMEND3758; GFX942-NEXT:    s_setpc_b64 s[30:31]3759  %vec0 = call <4 x half> asm "; def $0", "=s"()3760  %vec1 = call <4 x half> asm "; def $0", "=s"()3761  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3762  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3763  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 3>3764  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3765  ret void3766}3767 3768define void @s_shuffle_v2f16_v3f16__u_4() {3769; GFX900-LABEL: s_shuffle_v2f16_v3f16__u_4:3770; GFX900:       ; %bb.0:3771; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3772; GFX900-NEXT:    ;;#ASMSTART3773; GFX900-NEXT:    ; def s[8:9]3774; GFX900-NEXT:    ;;#ASMEND3775; GFX900-NEXT:    ;;#ASMSTART3776; GFX900-NEXT:    ; use s83777; GFX900-NEXT:    ;;#ASMEND3778; GFX900-NEXT:    s_setpc_b64 s[30:31]3779;3780; GFX90A-LABEL: s_shuffle_v2f16_v3f16__u_4:3781; GFX90A:       ; %bb.0:3782; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3783; GFX90A-NEXT:    ;;#ASMSTART3784; GFX90A-NEXT:    ; def s[8:9]3785; GFX90A-NEXT:    ;;#ASMEND3786; GFX90A-NEXT:    ;;#ASMSTART3787; GFX90A-NEXT:    ; use s83788; GFX90A-NEXT:    ;;#ASMEND3789; GFX90A-NEXT:    s_setpc_b64 s[30:31]3790;3791; GFX942-LABEL: s_shuffle_v2f16_v3f16__u_4:3792; GFX942:       ; %bb.0:3793; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3794; GFX942-NEXT:    ;;#ASMSTART3795; GFX942-NEXT:    ; def s[8:9]3796; GFX942-NEXT:    ;;#ASMEND3797; GFX942-NEXT:    s_nop 03798; GFX942-NEXT:    ;;#ASMSTART3799; GFX942-NEXT:    ; use s83800; GFX942-NEXT:    ;;#ASMEND3801; GFX942-NEXT:    s_setpc_b64 s[30:31]3802  %vec0 = call <4 x half> asm "; def $0", "=s"()3803  %vec1 = call <4 x half> asm "; def $0", "=s"()3804  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3805  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3806  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 poison, i32 4>3807  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3808  ret void3809}3810 3811define void @s_shuffle_v2f16_v3f16__0_4() {3812; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_4:3813; GFX900:       ; %bb.0:3814; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3815; GFX900-NEXT:    ;;#ASMSTART3816; GFX900-NEXT:    ; def s[4:5]3817; GFX900-NEXT:    ;;#ASMEND3818; GFX900-NEXT:    ;;#ASMSTART3819; GFX900-NEXT:    ; def s[6:7]3820; GFX900-NEXT:    ;;#ASMEND3821; GFX900-NEXT:    s_lshr_b32 s5, s6, 163822; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s53823; GFX900-NEXT:    ;;#ASMSTART3824; GFX900-NEXT:    ; use s83825; GFX900-NEXT:    ;;#ASMEND3826; GFX900-NEXT:    s_setpc_b64 s[30:31]3827;3828; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_4:3829; GFX90A:       ; %bb.0:3830; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3831; GFX90A-NEXT:    ;;#ASMSTART3832; GFX90A-NEXT:    ; def s[4:5]3833; GFX90A-NEXT:    ;;#ASMEND3834; GFX90A-NEXT:    ;;#ASMSTART3835; GFX90A-NEXT:    ; def s[6:7]3836; GFX90A-NEXT:    ;;#ASMEND3837; GFX90A-NEXT:    s_lshr_b32 s5, s6, 163838; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s53839; GFX90A-NEXT:    ;;#ASMSTART3840; GFX90A-NEXT:    ; use s83841; GFX90A-NEXT:    ;;#ASMEND3842; GFX90A-NEXT:    s_setpc_b64 s[30:31]3843;3844; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_4:3845; GFX942:       ; %bb.0:3846; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3847; GFX942-NEXT:    ;;#ASMSTART3848; GFX942-NEXT:    ; def s[0:1]3849; GFX942-NEXT:    ;;#ASMEND3850; GFX942-NEXT:    ;;#ASMSTART3851; GFX942-NEXT:    ; def s[2:3]3852; GFX942-NEXT:    ;;#ASMEND3853; GFX942-NEXT:    s_lshr_b32 s1, s2, 163854; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s13855; GFX942-NEXT:    ;;#ASMSTART3856; GFX942-NEXT:    ; use s83857; GFX942-NEXT:    ;;#ASMEND3858; GFX942-NEXT:    s_setpc_b64 s[30:31]3859  %vec0 = call <4 x half> asm "; def $0", "=s"()3860  %vec1 = call <4 x half> asm "; def $0", "=s"()3861  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3862  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3863  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 0, i32 4>3864  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3865  ret void3866}3867 3868define void @s_shuffle_v2f16_v3f16__1_4() {3869; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_4:3870; GFX900:       ; %bb.0:3871; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3872; GFX900-NEXT:    ;;#ASMSTART3873; GFX900-NEXT:    ; def s[4:5]3874; GFX900-NEXT:    ;;#ASMEND3875; GFX900-NEXT:    ;;#ASMSTART3876; GFX900-NEXT:    ; def s[6:7]3877; GFX900-NEXT:    ;;#ASMEND3878; GFX900-NEXT:    s_lshr_b32 s5, s6, 163879; GFX900-NEXT:    s_lshr_b32 s4, s4, 163880; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s53881; GFX900-NEXT:    ;;#ASMSTART3882; GFX900-NEXT:    ; use s83883; GFX900-NEXT:    ;;#ASMEND3884; GFX900-NEXT:    s_setpc_b64 s[30:31]3885;3886; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_4:3887; GFX90A:       ; %bb.0:3888; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3889; GFX90A-NEXT:    ;;#ASMSTART3890; GFX90A-NEXT:    ; def s[4:5]3891; GFX90A-NEXT:    ;;#ASMEND3892; GFX90A-NEXT:    ;;#ASMSTART3893; GFX90A-NEXT:    ; def s[6:7]3894; GFX90A-NEXT:    ;;#ASMEND3895; GFX90A-NEXT:    s_lshr_b32 s5, s6, 163896; GFX90A-NEXT:    s_lshr_b32 s4, s4, 163897; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s53898; GFX90A-NEXT:    ;;#ASMSTART3899; GFX90A-NEXT:    ; use s83900; GFX90A-NEXT:    ;;#ASMEND3901; GFX90A-NEXT:    s_setpc_b64 s[30:31]3902;3903; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_4:3904; GFX942:       ; %bb.0:3905; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3906; GFX942-NEXT:    ;;#ASMSTART3907; GFX942-NEXT:    ; def s[0:1]3908; GFX942-NEXT:    ;;#ASMEND3909; GFX942-NEXT:    ;;#ASMSTART3910; GFX942-NEXT:    ; def s[2:3]3911; GFX942-NEXT:    ;;#ASMEND3912; GFX942-NEXT:    s_lshr_b32 s1, s2, 163913; GFX942-NEXT:    s_lshr_b32 s0, s0, 163914; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s13915; GFX942-NEXT:    ;;#ASMSTART3916; GFX942-NEXT:    ; use s83917; GFX942-NEXT:    ;;#ASMEND3918; GFX942-NEXT:    s_setpc_b64 s[30:31]3919  %vec0 = call <4 x half> asm "; def $0", "=s"()3920  %vec1 = call <4 x half> asm "; def $0", "=s"()3921  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3922  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3923  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 1, i32 4>3924  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3925  ret void3926}3927 3928define void @s_shuffle_v2f16_v3f16__2_4() {3929; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_4:3930; GFX900:       ; %bb.0:3931; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3932; GFX900-NEXT:    ;;#ASMSTART3933; GFX900-NEXT:    ; def s[4:5]3934; GFX900-NEXT:    ;;#ASMEND3935; GFX900-NEXT:    ;;#ASMSTART3936; GFX900-NEXT:    ; def s[6:7]3937; GFX900-NEXT:    ;;#ASMEND3938; GFX900-NEXT:    s_lshr_b32 s4, s6, 163939; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s43940; GFX900-NEXT:    ;;#ASMSTART3941; GFX900-NEXT:    ; use s83942; GFX900-NEXT:    ;;#ASMEND3943; GFX900-NEXT:    s_setpc_b64 s[30:31]3944;3945; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_4:3946; GFX90A:       ; %bb.0:3947; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3948; GFX90A-NEXT:    ;;#ASMSTART3949; GFX90A-NEXT:    ; def s[4:5]3950; GFX90A-NEXT:    ;;#ASMEND3951; GFX90A-NEXT:    ;;#ASMSTART3952; GFX90A-NEXT:    ; def s[6:7]3953; GFX90A-NEXT:    ;;#ASMEND3954; GFX90A-NEXT:    s_lshr_b32 s4, s6, 163955; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s43956; GFX90A-NEXT:    ;;#ASMSTART3957; GFX90A-NEXT:    ; use s83958; GFX90A-NEXT:    ;;#ASMEND3959; GFX90A-NEXT:    s_setpc_b64 s[30:31]3960;3961; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_4:3962; GFX942:       ; %bb.0:3963; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3964; GFX942-NEXT:    ;;#ASMSTART3965; GFX942-NEXT:    ; def s[0:1]3966; GFX942-NEXT:    ;;#ASMEND3967; GFX942-NEXT:    ;;#ASMSTART3968; GFX942-NEXT:    ; def s[2:3]3969; GFX942-NEXT:    ;;#ASMEND3970; GFX942-NEXT:    s_lshr_b32 s0, s2, 163971; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s03972; GFX942-NEXT:    ;;#ASMSTART3973; GFX942-NEXT:    ; use s83974; GFX942-NEXT:    ;;#ASMEND3975; GFX942-NEXT:    s_setpc_b64 s[30:31]3976  %vec0 = call <4 x half> asm "; def $0", "=s"()3977  %vec1 = call <4 x half> asm "; def $0", "=s"()3978  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3979  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3980  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 2, i32 4>3981  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3982  ret void3983}3984 3985define void @s_shuffle_v2f16_v3f16__3_4() {3986; GFX900-LABEL: s_shuffle_v2f16_v3f16__3_4:3987; GFX900:       ; %bb.0:3988; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3989; GFX900-NEXT:    ;;#ASMSTART3990; GFX900-NEXT:    ; def s[8:9]3991; GFX900-NEXT:    ;;#ASMEND3992; GFX900-NEXT:    ;;#ASMSTART3993; GFX900-NEXT:    ; use s83994; GFX900-NEXT:    ;;#ASMEND3995; GFX900-NEXT:    s_setpc_b64 s[30:31]3996;3997; GFX90A-LABEL: s_shuffle_v2f16_v3f16__3_4:3998; GFX90A:       ; %bb.0:3999; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4000; GFX90A-NEXT:    ;;#ASMSTART4001; GFX90A-NEXT:    ; def s[8:9]4002; GFX90A-NEXT:    ;;#ASMEND4003; GFX90A-NEXT:    ;;#ASMSTART4004; GFX90A-NEXT:    ; use s84005; GFX90A-NEXT:    ;;#ASMEND4006; GFX90A-NEXT:    s_setpc_b64 s[30:31]4007;4008; GFX942-LABEL: s_shuffle_v2f16_v3f16__3_4:4009; GFX942:       ; %bb.0:4010; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4011; GFX942-NEXT:    ;;#ASMSTART4012; GFX942-NEXT:    ; def s[8:9]4013; GFX942-NEXT:    ;;#ASMEND4014; GFX942-NEXT:    s_nop 04015; GFX942-NEXT:    ;;#ASMSTART4016; GFX942-NEXT:    ; use s84017; GFX942-NEXT:    ;;#ASMEND4018; GFX942-NEXT:    s_setpc_b64 s[30:31]4019  %vec0 = call <4 x half> asm "; def $0", "=s"()4020  %vec1 = call <4 x half> asm "; def $0", "=s"()4021  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4022  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4023  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 3, i32 4>4024  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4025  ret void4026}4027 4028define void @s_shuffle_v2f16_v3f16__4_4() {4029; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_4:4030; GFX900:       ; %bb.0:4031; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4032; GFX900-NEXT:    ;;#ASMSTART4033; GFX900-NEXT:    ; def s[4:5]4034; GFX900-NEXT:    ;;#ASMEND4035; GFX900-NEXT:    s_lshr_b32 s4, s4, 164036; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s44037; GFX900-NEXT:    ;;#ASMSTART4038; GFX900-NEXT:    ; use s84039; GFX900-NEXT:    ;;#ASMEND4040; GFX900-NEXT:    s_setpc_b64 s[30:31]4041;4042; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_4:4043; GFX90A:       ; %bb.0:4044; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4045; GFX90A-NEXT:    ;;#ASMSTART4046; GFX90A-NEXT:    ; def s[4:5]4047; GFX90A-NEXT:    ;;#ASMEND4048; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164049; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s44050; GFX90A-NEXT:    ;;#ASMSTART4051; GFX90A-NEXT:    ; use s84052; GFX90A-NEXT:    ;;#ASMEND4053; GFX90A-NEXT:    s_setpc_b64 s[30:31]4054;4055; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_4:4056; GFX942:       ; %bb.0:4057; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4058; GFX942-NEXT:    ;;#ASMSTART4059; GFX942-NEXT:    ; def s[0:1]4060; GFX942-NEXT:    ;;#ASMEND4061; GFX942-NEXT:    s_lshr_b32 s0, s0, 164062; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s04063; GFX942-NEXT:    ;;#ASMSTART4064; GFX942-NEXT:    ; use s84065; GFX942-NEXT:    ;;#ASMEND4066; GFX942-NEXT:    s_setpc_b64 s[30:31]4067  %vec0 = call <4 x half> asm "; def $0", "=s"()4068  %vec1 = call <4 x half> asm "; def $0", "=s"()4069  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4070  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4071  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 4>4072  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4073  ret void4074}4075 4076define void @s_shuffle_v2f16_v3f16__u_5() {4077; GFX900-LABEL: s_shuffle_v2f16_v3f16__u_5:4078; GFX900:       ; %bb.0:4079; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4080; GFX900-NEXT:    ;;#ASMSTART4081; GFX900-NEXT:    ; def s[4:5]4082; GFX900-NEXT:    ;;#ASMEND4083; GFX900-NEXT:    s_lshl_b32 s8, s5, 164084; GFX900-NEXT:    ;;#ASMSTART4085; GFX900-NEXT:    ; use s84086; GFX900-NEXT:    ;;#ASMEND4087; GFX900-NEXT:    s_setpc_b64 s[30:31]4088;4089; GFX90A-LABEL: s_shuffle_v2f16_v3f16__u_5:4090; GFX90A:       ; %bb.0:4091; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4092; GFX90A-NEXT:    ;;#ASMSTART4093; GFX90A-NEXT:    ; def s[4:5]4094; GFX90A-NEXT:    ;;#ASMEND4095; GFX90A-NEXT:    s_lshl_b32 s8, s5, 164096; GFX90A-NEXT:    ;;#ASMSTART4097; GFX90A-NEXT:    ; use s84098; GFX90A-NEXT:    ;;#ASMEND4099; GFX90A-NEXT:    s_setpc_b64 s[30:31]4100;4101; GFX942-LABEL: s_shuffle_v2f16_v3f16__u_5:4102; GFX942:       ; %bb.0:4103; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4104; GFX942-NEXT:    ;;#ASMSTART4105; GFX942-NEXT:    ; def s[0:1]4106; GFX942-NEXT:    ;;#ASMEND4107; GFX942-NEXT:    s_lshl_b32 s8, s1, 164108; GFX942-NEXT:    ;;#ASMSTART4109; GFX942-NEXT:    ; use s84110; GFX942-NEXT:    ;;#ASMEND4111; GFX942-NEXT:    s_setpc_b64 s[30:31]4112  %vec0 = call <4 x half> asm "; def $0", "=s"()4113  %vec1 = call <4 x half> asm "; def $0", "=s"()4114  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4115  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4116  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 poison, i32 5>4117  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4118  ret void4119}4120 4121define void @s_shuffle_v2f16_v3f16__0_5() {4122; GFX900-LABEL: s_shuffle_v2f16_v3f16__0_5:4123; GFX900:       ; %bb.0:4124; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4125; GFX900-NEXT:    ;;#ASMSTART4126; GFX900-NEXT:    ; def s[4:5]4127; GFX900-NEXT:    ;;#ASMEND4128; GFX900-NEXT:    ;;#ASMSTART4129; GFX900-NEXT:    ; def s[6:7]4130; GFX900-NEXT:    ;;#ASMEND4131; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s74132; GFX900-NEXT:    ;;#ASMSTART4133; GFX900-NEXT:    ; use s84134; GFX900-NEXT:    ;;#ASMEND4135; GFX900-NEXT:    s_setpc_b64 s[30:31]4136;4137; GFX90A-LABEL: s_shuffle_v2f16_v3f16__0_5:4138; GFX90A:       ; %bb.0:4139; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4140; GFX90A-NEXT:    ;;#ASMSTART4141; GFX90A-NEXT:    ; def s[4:5]4142; GFX90A-NEXT:    ;;#ASMEND4143; GFX90A-NEXT:    ;;#ASMSTART4144; GFX90A-NEXT:    ; def s[6:7]4145; GFX90A-NEXT:    ;;#ASMEND4146; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s74147; GFX90A-NEXT:    ;;#ASMSTART4148; GFX90A-NEXT:    ; use s84149; GFX90A-NEXT:    ;;#ASMEND4150; GFX90A-NEXT:    s_setpc_b64 s[30:31]4151;4152; GFX942-LABEL: s_shuffle_v2f16_v3f16__0_5:4153; GFX942:       ; %bb.0:4154; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4155; GFX942-NEXT:    ;;#ASMSTART4156; GFX942-NEXT:    ; def s[0:1]4157; GFX942-NEXT:    ;;#ASMEND4158; GFX942-NEXT:    ;;#ASMSTART4159; GFX942-NEXT:    ; def s[2:3]4160; GFX942-NEXT:    ;;#ASMEND4161; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s34162; GFX942-NEXT:    ;;#ASMSTART4163; GFX942-NEXT:    ; use s84164; GFX942-NEXT:    ;;#ASMEND4165; GFX942-NEXT:    s_setpc_b64 s[30:31]4166  %vec0 = call <4 x half> asm "; def $0", "=s"()4167  %vec1 = call <4 x half> asm "; def $0", "=s"()4168  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4169  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4170  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 0, i32 5>4171  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4172  ret void4173}4174 4175define void @s_shuffle_v2f16_v3f16__1_5() {4176; GFX900-LABEL: s_shuffle_v2f16_v3f16__1_5:4177; GFX900:       ; %bb.0:4178; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4179; GFX900-NEXT:    ;;#ASMSTART4180; GFX900-NEXT:    ; def s[4:5]4181; GFX900-NEXT:    ;;#ASMEND4182; GFX900-NEXT:    s_lshr_b32 s4, s4, 164183; GFX900-NEXT:    ;;#ASMSTART4184; GFX900-NEXT:    ; def s[6:7]4185; GFX900-NEXT:    ;;#ASMEND4186; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s74187; GFX900-NEXT:    ;;#ASMSTART4188; GFX900-NEXT:    ; use s84189; GFX900-NEXT:    ;;#ASMEND4190; GFX900-NEXT:    s_setpc_b64 s[30:31]4191;4192; GFX90A-LABEL: s_shuffle_v2f16_v3f16__1_5:4193; GFX90A:       ; %bb.0:4194; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4195; GFX90A-NEXT:    ;;#ASMSTART4196; GFX90A-NEXT:    ; def s[4:5]4197; GFX90A-NEXT:    ;;#ASMEND4198; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164199; GFX90A-NEXT:    ;;#ASMSTART4200; GFX90A-NEXT:    ; def s[6:7]4201; GFX90A-NEXT:    ;;#ASMEND4202; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s74203; GFX90A-NEXT:    ;;#ASMSTART4204; GFX90A-NEXT:    ; use s84205; GFX90A-NEXT:    ;;#ASMEND4206; GFX90A-NEXT:    s_setpc_b64 s[30:31]4207;4208; GFX942-LABEL: s_shuffle_v2f16_v3f16__1_5:4209; GFX942:       ; %bb.0:4210; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4211; GFX942-NEXT:    ;;#ASMSTART4212; GFX942-NEXT:    ; def s[0:1]4213; GFX942-NEXT:    ;;#ASMEND4214; GFX942-NEXT:    s_lshr_b32 s0, s0, 164215; GFX942-NEXT:    ;;#ASMSTART4216; GFX942-NEXT:    ; def s[2:3]4217; GFX942-NEXT:    ;;#ASMEND4218; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s34219; GFX942-NEXT:    ;;#ASMSTART4220; GFX942-NEXT:    ; use s84221; GFX942-NEXT:    ;;#ASMEND4222; GFX942-NEXT:    s_setpc_b64 s[30:31]4223  %vec0 = call <4 x half> asm "; def $0", "=s"()4224  %vec1 = call <4 x half> asm "; def $0", "=s"()4225  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4226  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4227  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 1, i32 5>4228  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4229  ret void4230}4231 4232define void @s_shuffle_v2f16_v3f16__2_5() {4233; GFX900-LABEL: s_shuffle_v2f16_v3f16__2_5:4234; GFX900:       ; %bb.0:4235; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4236; GFX900-NEXT:    ;;#ASMSTART4237; GFX900-NEXT:    ; def s[4:5]4238; GFX900-NEXT:    ;;#ASMEND4239; GFX900-NEXT:    ;;#ASMSTART4240; GFX900-NEXT:    ; def s[6:7]4241; GFX900-NEXT:    ;;#ASMEND4242; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s74243; GFX900-NEXT:    ;;#ASMSTART4244; GFX900-NEXT:    ; use s84245; GFX900-NEXT:    ;;#ASMEND4246; GFX900-NEXT:    s_setpc_b64 s[30:31]4247;4248; GFX90A-LABEL: s_shuffle_v2f16_v3f16__2_5:4249; GFX90A:       ; %bb.0:4250; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4251; GFX90A-NEXT:    ;;#ASMSTART4252; GFX90A-NEXT:    ; def s[4:5]4253; GFX90A-NEXT:    ;;#ASMEND4254; GFX90A-NEXT:    ;;#ASMSTART4255; GFX90A-NEXT:    ; def s[6:7]4256; GFX90A-NEXT:    ;;#ASMEND4257; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s74258; GFX90A-NEXT:    ;;#ASMSTART4259; GFX90A-NEXT:    ; use s84260; GFX90A-NEXT:    ;;#ASMEND4261; GFX90A-NEXT:    s_setpc_b64 s[30:31]4262;4263; GFX942-LABEL: s_shuffle_v2f16_v3f16__2_5:4264; GFX942:       ; %bb.0:4265; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4266; GFX942-NEXT:    ;;#ASMSTART4267; GFX942-NEXT:    ; def s[0:1]4268; GFX942-NEXT:    ;;#ASMEND4269; GFX942-NEXT:    ;;#ASMSTART4270; GFX942-NEXT:    ; def s[2:3]4271; GFX942-NEXT:    ;;#ASMEND4272; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s34273; GFX942-NEXT:    ;;#ASMSTART4274; GFX942-NEXT:    ; use s84275; GFX942-NEXT:    ;;#ASMEND4276; GFX942-NEXT:    s_setpc_b64 s[30:31]4277  %vec0 = call <4 x half> asm "; def $0", "=s"()4278  %vec1 = call <4 x half> asm "; def $0", "=s"()4279  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4280  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4281  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 2, i32 5>4282  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4283  ret void4284}4285 4286define void @s_shuffle_v2f16_v3f16__3_5() {4287; GFX900-LABEL: s_shuffle_v2f16_v3f16__3_5:4288; GFX900:       ; %bb.0:4289; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4290; GFX900-NEXT:    ;;#ASMSTART4291; GFX900-NEXT:    ; def s[4:5]4292; GFX900-NEXT:    ;;#ASMEND4293; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s54294; GFX900-NEXT:    ;;#ASMSTART4295; GFX900-NEXT:    ; use s84296; GFX900-NEXT:    ;;#ASMEND4297; GFX900-NEXT:    s_setpc_b64 s[30:31]4298;4299; GFX90A-LABEL: s_shuffle_v2f16_v3f16__3_5:4300; GFX90A:       ; %bb.0:4301; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4302; GFX90A-NEXT:    ;;#ASMSTART4303; GFX90A-NEXT:    ; def s[4:5]4304; GFX90A-NEXT:    ;;#ASMEND4305; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s54306; GFX90A-NEXT:    ;;#ASMSTART4307; GFX90A-NEXT:    ; use s84308; GFX90A-NEXT:    ;;#ASMEND4309; GFX90A-NEXT:    s_setpc_b64 s[30:31]4310;4311; GFX942-LABEL: s_shuffle_v2f16_v3f16__3_5:4312; GFX942:       ; %bb.0:4313; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4314; GFX942-NEXT:    ;;#ASMSTART4315; GFX942-NEXT:    ; def s[0:1]4316; GFX942-NEXT:    ;;#ASMEND4317; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s14318; GFX942-NEXT:    ;;#ASMSTART4319; GFX942-NEXT:    ; use s84320; GFX942-NEXT:    ;;#ASMEND4321; GFX942-NEXT:    s_setpc_b64 s[30:31]4322  %vec0 = call <4 x half> asm "; def $0", "=s"()4323  %vec1 = call <4 x half> asm "; def $0", "=s"()4324  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4325  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4326  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 3, i32 5>4327  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4328  ret void4329}4330 4331define void @s_shuffle_v2f16_v3f16__4_5() {4332; GFX900-LABEL: s_shuffle_v2f16_v3f16__4_5:4333; GFX900:       ; %bb.0:4334; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4335; GFX900-NEXT:    ;;#ASMSTART4336; GFX900-NEXT:    ; def s[4:5]4337; GFX900-NEXT:    ;;#ASMEND4338; GFX900-NEXT:    s_lshr_b32 s4, s4, 164339; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s54340; GFX900-NEXT:    ;;#ASMSTART4341; GFX900-NEXT:    ; use s84342; GFX900-NEXT:    ;;#ASMEND4343; GFX900-NEXT:    s_setpc_b64 s[30:31]4344;4345; GFX90A-LABEL: s_shuffle_v2f16_v3f16__4_5:4346; GFX90A:       ; %bb.0:4347; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4348; GFX90A-NEXT:    ;;#ASMSTART4349; GFX90A-NEXT:    ; def s[4:5]4350; GFX90A-NEXT:    ;;#ASMEND4351; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164352; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s54353; GFX90A-NEXT:    ;;#ASMSTART4354; GFX90A-NEXT:    ; use s84355; GFX90A-NEXT:    ;;#ASMEND4356; GFX90A-NEXT:    s_setpc_b64 s[30:31]4357;4358; GFX942-LABEL: s_shuffle_v2f16_v3f16__4_5:4359; GFX942:       ; %bb.0:4360; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4361; GFX942-NEXT:    ;;#ASMSTART4362; GFX942-NEXT:    ; def s[0:1]4363; GFX942-NEXT:    ;;#ASMEND4364; GFX942-NEXT:    s_lshr_b32 s0, s0, 164365; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s14366; GFX942-NEXT:    ;;#ASMSTART4367; GFX942-NEXT:    ; use s84368; GFX942-NEXT:    ;;#ASMEND4369; GFX942-NEXT:    s_setpc_b64 s[30:31]4370  %vec0 = call <4 x half> asm "; def $0", "=s"()4371  %vec1 = call <4 x half> asm "; def $0", "=s"()4372  %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4373  %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4374  %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <2 x i32> <i32 4, i32 5>4375  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4376  ret void4377}4378;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:4379; GFX90APLUS: {{.*}}4380