brintos

brintos / llvm-project-archived public Read only

0
0
Text · 343.5 KiB · 0cf6da3 Raw
8901 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_v3i16_v3i16__u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v3i16_v3i16__u_u_u:9; GFX9:       ; %bb.0:10; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT:    s_setpc_b64 s[30:31]12  %vec0 = call <4 x i16> asm "; def $0", "=v"()13  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>14  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> poison15  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 816  ret void17}18 19define void @v_shuffle_v3i16_v3i16__0_u_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_u_u:21; GFX900:       ; %bb.0:22; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; GFX900-NEXT:    v_mov_b32_e32 v2, 024; GFX900-NEXT:    ;;#ASMSTART25; GFX900-NEXT:    ; def v[0:1]26; GFX900-NEXT:    ;;#ASMEND27; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:428; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]29; GFX900-NEXT:    s_waitcnt vmcnt(0)30; GFX900-NEXT:    s_setpc_b64 s[30:31]31;32; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_u_u:33; GFX90A:       ; %bb.0:34; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)35; GFX90A-NEXT:    v_mov_b32_e32 v2, 036; GFX90A-NEXT:    ;;#ASMSTART37; GFX90A-NEXT:    ; def v[0:1]38; GFX90A-NEXT:    ;;#ASMEND39; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:440; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]41; GFX90A-NEXT:    s_waitcnt vmcnt(0)42; GFX90A-NEXT:    s_setpc_b64 s[30:31]43;44; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_u_u:45; GFX942:       ; %bb.0:46; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX942-NEXT:    v_mov_b32_e32 v2, 048; GFX942-NEXT:    ;;#ASMSTART49; GFX942-NEXT:    ; def v[0:1]50; GFX942-NEXT:    ;;#ASMEND51; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:452; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]53; GFX942-NEXT:    s_waitcnt vmcnt(0)54; GFX942-NEXT:    s_setpc_b64 s[30:31]55  %vec0 = call <4 x i16> asm "; def $0", "=v"()56  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>57  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>58  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 859  ret void60}61 62define void @v_shuffle_v3i16_v3i16__1_u_u(ptr addrspace(1) inreg %ptr) {63; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_u_u:64; GFX900:       ; %bb.0:65; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX900-NEXT:    ;;#ASMSTART67; GFX900-NEXT:    ; def v[0:1]68; GFX900-NEXT:    ;;#ASMEND69; GFX900-NEXT:    v_mov_b32_e32 v2, 070; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 1671; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]72; GFX900-NEXT:    s_waitcnt vmcnt(0)73; GFX900-NEXT:    s_setpc_b64 s[30:31]74;75; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_u_u:76; GFX90A:       ; %bb.0:77; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX90A-NEXT:    ;;#ASMSTART79; GFX90A-NEXT:    ; def v[0:1]80; GFX90A-NEXT:    ;;#ASMEND81; GFX90A-NEXT:    v_mov_b32_e32 v2, 082; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 1683; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]84; GFX90A-NEXT:    s_waitcnt vmcnt(0)85; GFX90A-NEXT:    s_setpc_b64 s[30:31]86;87; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_u_u:88; GFX942:       ; %bb.0:89; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)90; GFX942-NEXT:    ;;#ASMSTART91; GFX942-NEXT:    ; def v[0:1]92; GFX942-NEXT:    ;;#ASMEND93; GFX942-NEXT:    v_mov_b32_e32 v2, 094; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 1695; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]96; GFX942-NEXT:    s_waitcnt vmcnt(0)97; GFX942-NEXT:    s_setpc_b64 s[30:31]98  %vec0 = call <4 x i16> asm "; def $0", "=v"()99  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>100  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>101  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8102  ret void103}104 105define void @v_shuffle_v3i16_v3i16__2_u_u(ptr addrspace(1) inreg %ptr) {106; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_u_u:107; GFX900:       ; %bb.0:108; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)109; GFX900-NEXT:    v_mov_b32_e32 v2, 0110; GFX900-NEXT:    ;;#ASMSTART111; GFX900-NEXT:    ; def v[0:1]112; GFX900-NEXT:    ;;#ASMEND113; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]114; GFX900-NEXT:    s_waitcnt vmcnt(0)115; GFX900-NEXT:    s_setpc_b64 s[30:31]116;117; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_u_u:118; GFX90A:       ; %bb.0:119; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX90A-NEXT:    v_mov_b32_e32 v2, 0121; GFX90A-NEXT:    ;;#ASMSTART122; GFX90A-NEXT:    ; def v[0:1]123; GFX90A-NEXT:    ;;#ASMEND124; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]125; GFX90A-NEXT:    s_waitcnt vmcnt(0)126; GFX90A-NEXT:    s_setpc_b64 s[30:31]127;128; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_u_u:129; GFX942:       ; %bb.0:130; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GFX942-NEXT:    v_mov_b32_e32 v2, 0132; GFX942-NEXT:    ;;#ASMSTART133; GFX942-NEXT:    ; def v[0:1]134; GFX942-NEXT:    ;;#ASMEND135; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]136; GFX942-NEXT:    s_waitcnt vmcnt(0)137; GFX942-NEXT:    s_setpc_b64 s[30:31]138  %vec0 = call <4 x i16> asm "; def $0", "=v"()139  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>140  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>141  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8142  ret void143}144 145define void @v_shuffle_v3i16_v3i16__3_u_u(ptr addrspace(1) inreg %ptr) {146; GFX9-LABEL: v_shuffle_v3i16_v3i16__3_u_u:147; GFX9:       ; %bb.0:148; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)149; GFX9-NEXT:    s_setpc_b64 s[30:31]150  %vec0 = call <4 x i16> asm "; def $0", "=v"()151  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>152  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 poison, i32 poison>153  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8154  ret void155}156 157define void @v_shuffle_v3i16_v3i16__4_u_u(ptr addrspace(1) inreg %ptr) {158; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_u_u:159; GFX900:       ; %bb.0:160; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)161; GFX900-NEXT:    ;;#ASMSTART162; GFX900-NEXT:    ; def v[0:1]163; GFX900-NEXT:    ;;#ASMEND164; GFX900-NEXT:    v_mov_b32_e32 v2, 0165; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16166; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]167; GFX900-NEXT:    s_waitcnt vmcnt(0)168; GFX900-NEXT:    s_setpc_b64 s[30:31]169;170; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_u_u:171; GFX90A:       ; %bb.0:172; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX90A-NEXT:    ;;#ASMSTART174; GFX90A-NEXT:    ; def v[0:1]175; GFX90A-NEXT:    ;;#ASMEND176; GFX90A-NEXT:    v_mov_b32_e32 v2, 0177; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16178; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]179; GFX90A-NEXT:    s_waitcnt vmcnt(0)180; GFX90A-NEXT:    s_setpc_b64 s[30:31]181;182; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_u_u:183; GFX942:       ; %bb.0:184; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)185; GFX942-NEXT:    ;;#ASMSTART186; GFX942-NEXT:    ; def v[0:1]187; GFX942-NEXT:    ;;#ASMEND188; GFX942-NEXT:    v_mov_b32_e32 v2, 0189; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 16190; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]191; GFX942-NEXT:    s_waitcnt vmcnt(0)192; GFX942-NEXT:    s_setpc_b64 s[30:31]193  %vec0 = call <4 x i16> asm "; def $0", "=v"()194  %vec1 = call <4 x i16> asm "; def $0", "=v"()195  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>196  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>197  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 poison, i32 poison>198  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8199  ret void200}201 202define void @v_shuffle_v3i16_v3i16__5_u_u(ptr addrspace(1) inreg %ptr) {203; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_u:204; GFX900:       ; %bb.0:205; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX900-NEXT:    v_mov_b32_e32 v2, 0207; GFX900-NEXT:    ;;#ASMSTART208; GFX900-NEXT:    ; def v[0:1]209; GFX900-NEXT:    ;;#ASMEND210; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]211; GFX900-NEXT:    s_waitcnt vmcnt(0)212; GFX900-NEXT:    s_setpc_b64 s[30:31]213;214; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_u:215; GFX90A:       ; %bb.0:216; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)217; GFX90A-NEXT:    v_mov_b32_e32 v2, 0218; GFX90A-NEXT:    ;;#ASMSTART219; GFX90A-NEXT:    ; def v[0:1]220; GFX90A-NEXT:    ;;#ASMEND221; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]222; GFX90A-NEXT:    s_waitcnt vmcnt(0)223; GFX90A-NEXT:    s_setpc_b64 s[30:31]224;225; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_u:226; GFX942:       ; %bb.0:227; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX942-NEXT:    v_mov_b32_e32 v2, 0229; GFX942-NEXT:    ;;#ASMSTART230; GFX942-NEXT:    ; def v[0:1]231; GFX942-NEXT:    ;;#ASMEND232; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]233; GFX942-NEXT:    s_waitcnt vmcnt(0)234; GFX942-NEXT:    s_setpc_b64 s[30:31]235  %vec0 = call <4 x i16> asm "; def $0", "=v"()236  %vec1 = call <4 x i16> asm "; def $0", "=v"()237  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>238  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>239  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 poison>240  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8241  ret void242}243 244define void @v_shuffle_v3i16_v3i16__5_0_u(ptr addrspace(1) inreg %ptr) {245; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_u:246; GFX900:       ; %bb.0:247; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)248; GFX900-NEXT:    ;;#ASMSTART249; GFX900-NEXT:    ; def v[0:1]250; GFX900-NEXT:    ;;#ASMEND251; GFX900-NEXT:    s_mov_b32 s4, 0x5040100252; GFX900-NEXT:    v_mov_b32_e32 v3, 0253; GFX900-NEXT:    ;;#ASMSTART254; GFX900-NEXT:    ; def v[1:2]255; GFX900-NEXT:    ;;#ASMEND256; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s4257; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]258; GFX900-NEXT:    s_waitcnt vmcnt(0)259; GFX900-NEXT:    s_setpc_b64 s[30:31]260;261; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_u:262; GFX90A:       ; %bb.0:263; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)264; GFX90A-NEXT:    ;;#ASMSTART265; GFX90A-NEXT:    ; def v[0:1]266; GFX90A-NEXT:    ;;#ASMEND267; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100268; GFX90A-NEXT:    v_mov_b32_e32 v4, 0269; GFX90A-NEXT:    ;;#ASMSTART270; GFX90A-NEXT:    ; def v[2:3]271; GFX90A-NEXT:    ;;#ASMEND272; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s4273; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]274; GFX90A-NEXT:    s_waitcnt vmcnt(0)275; GFX90A-NEXT:    s_setpc_b64 s[30:31]276;277; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_u:278; GFX942:       ; %bb.0:279; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)280; GFX942-NEXT:    ;;#ASMSTART281; GFX942-NEXT:    ; def v[0:1]282; GFX942-NEXT:    ;;#ASMEND283; GFX942-NEXT:    s_mov_b32 s2, 0x5040100284; GFX942-NEXT:    v_mov_b32_e32 v4, 0285; GFX942-NEXT:    ;;#ASMSTART286; GFX942-NEXT:    ; def v[2:3]287; GFX942-NEXT:    ;;#ASMEND288; GFX942-NEXT:    s_nop 0289; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s2290; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]291; GFX942-NEXT:    s_waitcnt vmcnt(0)292; GFX942-NEXT:    s_setpc_b64 s[30:31]293  %vec0 = call <4 x i16> asm "; def $0", "=v"()294  %vec1 = call <4 x i16> asm "; def $0", "=v"()295  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>296  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>297  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 poison>298  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8299  ret void300}301 302define void @v_shuffle_v3i16_v3i16__5_1_u(ptr addrspace(1) inreg %ptr) {303; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_u:304; GFX900:       ; %bb.0:305; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)306; GFX900-NEXT:    ;;#ASMSTART307; GFX900-NEXT:    ; def v[0:1]308; GFX900-NEXT:    ;;#ASMEND309; GFX900-NEXT:    s_mov_b32 s4, 0xffff310; GFX900-NEXT:    v_mov_b32_e32 v3, 0311; GFX900-NEXT:    ;;#ASMSTART312; GFX900-NEXT:    ; def v[1:2]313; GFX900-NEXT:    ;;#ASMEND314; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v0315; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]316; GFX900-NEXT:    s_waitcnt vmcnt(0)317; GFX900-NEXT:    s_setpc_b64 s[30:31]318;319; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_u:320; GFX90A:       ; %bb.0:321; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX90A-NEXT:    ;;#ASMSTART323; GFX90A-NEXT:    ; def v[0:1]324; GFX90A-NEXT:    ;;#ASMEND325; GFX90A-NEXT:    s_mov_b32 s4, 0xffff326; GFX90A-NEXT:    v_mov_b32_e32 v4, 0327; GFX90A-NEXT:    ;;#ASMSTART328; GFX90A-NEXT:    ; def v[2:3]329; GFX90A-NEXT:    ;;#ASMEND330; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v0331; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]332; GFX90A-NEXT:    s_waitcnt vmcnt(0)333; GFX90A-NEXT:    s_setpc_b64 s[30:31]334;335; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_u:336; GFX942:       ; %bb.0:337; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)338; GFX942-NEXT:    ;;#ASMSTART339; GFX942-NEXT:    ; def v[0:1]340; GFX942-NEXT:    ;;#ASMEND341; GFX942-NEXT:    s_mov_b32 s2, 0xffff342; GFX942-NEXT:    v_mov_b32_e32 v4, 0343; GFX942-NEXT:    ;;#ASMSTART344; GFX942-NEXT:    ; def v[2:3]345; GFX942-NEXT:    ;;#ASMEND346; GFX942-NEXT:    s_nop 0347; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v0348; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]349; GFX942-NEXT:    s_waitcnt vmcnt(0)350; GFX942-NEXT:    s_setpc_b64 s[30:31]351  %vec0 = call <4 x i16> asm "; def $0", "=v"()352  %vec1 = call <4 x i16> asm "; def $0", "=v"()353  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>354  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>355  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 poison>356  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8357  ret void358}359 360define void @v_shuffle_v3i16_v3i16__5_2_u(ptr addrspace(1) inreg %ptr) {361; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_u:362; GFX900:       ; %bb.0:363; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)364; GFX900-NEXT:    ;;#ASMSTART365; GFX900-NEXT:    ; def v[0:1]366; GFX900-NEXT:    ;;#ASMEND367; GFX900-NEXT:    s_mov_b32 s4, 0x5040100368; GFX900-NEXT:    v_mov_b32_e32 v4, 0369; GFX900-NEXT:    ;;#ASMSTART370; GFX900-NEXT:    ; def v[2:3]371; GFX900-NEXT:    ;;#ASMEND372; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s4373; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]374; GFX900-NEXT:    s_waitcnt vmcnt(0)375; GFX900-NEXT:    s_setpc_b64 s[30:31]376;377; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_u:378; GFX90A:       ; %bb.0:379; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)380; GFX90A-NEXT:    ;;#ASMSTART381; GFX90A-NEXT:    ; def v[0:1]382; GFX90A-NEXT:    ;;#ASMEND383; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100384; GFX90A-NEXT:    v_mov_b32_e32 v4, 0385; GFX90A-NEXT:    ;;#ASMSTART386; GFX90A-NEXT:    ; def v[2:3]387; GFX90A-NEXT:    ;;#ASMEND388; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s4389; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]390; GFX90A-NEXT:    s_waitcnt vmcnt(0)391; GFX90A-NEXT:    s_setpc_b64 s[30:31]392;393; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_u:394; GFX942:       ; %bb.0:395; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)396; GFX942-NEXT:    ;;#ASMSTART397; GFX942-NEXT:    ; def v[0:1]398; GFX942-NEXT:    ;;#ASMEND399; GFX942-NEXT:    s_mov_b32 s2, 0x5040100400; GFX942-NEXT:    v_mov_b32_e32 v4, 0401; GFX942-NEXT:    ;;#ASMSTART402; GFX942-NEXT:    ; def v[2:3]403; GFX942-NEXT:    ;;#ASMEND404; GFX942-NEXT:    s_nop 0405; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s2406; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]407; GFX942-NEXT:    s_waitcnt vmcnt(0)408; GFX942-NEXT:    s_setpc_b64 s[30:31]409  %vec0 = call <4 x i16> asm "; def $0", "=v"()410  %vec1 = call <4 x i16> asm "; def $0", "=v"()411  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>412  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>413  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 poison>414  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8415  ret void416}417 418define void @v_shuffle_v3i16_v3i16__5_3_u(ptr addrspace(1) inreg %ptr) {419; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_u:420; GFX900:       ; %bb.0:421; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)422; GFX900-NEXT:    ;;#ASMSTART423; GFX900-NEXT:    ; def v[0:1]424; GFX900-NEXT:    ;;#ASMEND425; GFX900-NEXT:    s_mov_b32 s4, 0x5040100426; GFX900-NEXT:    v_mov_b32_e32 v2, 0427; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4428; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]429; GFX900-NEXT:    s_waitcnt vmcnt(0)430; GFX900-NEXT:    s_setpc_b64 s[30:31]431;432; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_u:433; GFX90A:       ; %bb.0:434; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)435; GFX90A-NEXT:    ;;#ASMSTART436; GFX90A-NEXT:    ; def v[0:1]437; GFX90A-NEXT:    ;;#ASMEND438; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100439; GFX90A-NEXT:    v_mov_b32_e32 v2, 0440; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4441; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]442; GFX90A-NEXT:    s_waitcnt vmcnt(0)443; GFX90A-NEXT:    s_setpc_b64 s[30:31]444;445; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_u:446; GFX942:       ; %bb.0:447; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)448; GFX942-NEXT:    ;;#ASMSTART449; GFX942-NEXT:    ; def v[0:1]450; GFX942-NEXT:    ;;#ASMEND451; GFX942-NEXT:    s_mov_b32 s2, 0x5040100452; GFX942-NEXT:    v_mov_b32_e32 v2, 0453; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s2454; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]455; GFX942-NEXT:    s_waitcnt vmcnt(0)456; GFX942-NEXT:    s_setpc_b64 s[30:31]457  %vec0 = call <4 x i16> asm "; def $0", "=v"()458  %vec1 = call <4 x i16> asm "; def $0", "=v"()459  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>460  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>461  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 poison>462  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8463  ret void464}465 466define void @v_shuffle_v3i16_v3i16__5_4_u(ptr addrspace(1) inreg %ptr) {467; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_u:468; GFX900:       ; %bb.0:469; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)470; GFX900-NEXT:    ;;#ASMSTART471; GFX900-NEXT:    ; def v[0:1]472; GFX900-NEXT:    ;;#ASMEND473; GFX900-NEXT:    s_mov_b32 s4, 0xffff474; GFX900-NEXT:    v_mov_b32_e32 v2, 0475; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v0476; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]477; GFX900-NEXT:    s_waitcnt vmcnt(0)478; GFX900-NEXT:    s_setpc_b64 s[30:31]479;480; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_u:481; GFX90A:       ; %bb.0:482; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)483; GFX90A-NEXT:    ;;#ASMSTART484; GFX90A-NEXT:    ; def v[0:1]485; GFX90A-NEXT:    ;;#ASMEND486; GFX90A-NEXT:    s_mov_b32 s4, 0xffff487; GFX90A-NEXT:    v_mov_b32_e32 v2, 0488; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v0489; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]490; GFX90A-NEXT:    s_waitcnt vmcnt(0)491; GFX90A-NEXT:    s_setpc_b64 s[30:31]492;493; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_u:494; GFX942:       ; %bb.0:495; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX942-NEXT:    ;;#ASMSTART497; GFX942-NEXT:    ; def v[0:1]498; GFX942-NEXT:    ;;#ASMEND499; GFX942-NEXT:    s_mov_b32 s2, 0xffff500; GFX942-NEXT:    v_mov_b32_e32 v2, 0501; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v0502; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]503; GFX942-NEXT:    s_waitcnt vmcnt(0)504; GFX942-NEXT:    s_setpc_b64 s[30:31]505  %vec0 = call <4 x i16> asm "; def $0", "=v"()506  %vec1 = call <4 x i16> asm "; def $0", "=v"()507  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>508  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>509  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 poison>510  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8511  ret void512}513 514define void @v_shuffle_v3i16_v3i16__5_5_u(ptr addrspace(1) inreg %ptr) {515; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_u:516; GFX900:       ; %bb.0:517; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)518; GFX900-NEXT:    ;;#ASMSTART519; GFX900-NEXT:    ; def v[0:1]520; GFX900-NEXT:    ;;#ASMEND521; GFX900-NEXT:    s_mov_b32 s4, 0x5040100522; GFX900-NEXT:    v_mov_b32_e32 v2, 0523; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4524; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]525; GFX900-NEXT:    s_waitcnt vmcnt(0)526; GFX900-NEXT:    s_setpc_b64 s[30:31]527;528; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_u:529; GFX90A:       ; %bb.0:530; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)531; GFX90A-NEXT:    ;;#ASMSTART532; GFX90A-NEXT:    ; def v[0:1]533; GFX90A-NEXT:    ;;#ASMEND534; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100535; GFX90A-NEXT:    v_mov_b32_e32 v2, 0536; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4537; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]538; GFX90A-NEXT:    s_waitcnt vmcnt(0)539; GFX90A-NEXT:    s_setpc_b64 s[30:31]540;541; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_u:542; GFX942:       ; %bb.0:543; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)544; GFX942-NEXT:    ;;#ASMSTART545; GFX942-NEXT:    ; def v[0:1]546; GFX942-NEXT:    ;;#ASMEND547; GFX942-NEXT:    s_mov_b32 s2, 0x5040100548; GFX942-NEXT:    v_mov_b32_e32 v2, 0549; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s2550; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]551; GFX942-NEXT:    s_waitcnt vmcnt(0)552; GFX942-NEXT:    s_setpc_b64 s[30:31]553  %vec0 = call <4 x i16> asm "; def $0", "=v"()554  %vec1 = call <4 x i16> asm "; def $0", "=v"()555  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>556  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>557  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 poison>558  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8559  ret void560}561 562define void @v_shuffle_v3i16_v3i16__5_5_0(ptr addrspace(1) inreg %ptr) {563; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_0:564; GFX900:       ; %bb.0:565; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)566; GFX900-NEXT:    ;;#ASMSTART567; GFX900-NEXT:    ; def v[0:1]568; GFX900-NEXT:    ;;#ASMEND569; GFX900-NEXT:    v_mov_b32_e32 v3, 0570; GFX900-NEXT:    ;;#ASMSTART571; GFX900-NEXT:    ; def v[1:2]572; GFX900-NEXT:    ;;#ASMEND573; GFX900-NEXT:    s_mov_b32 s4, 0x5040100574; GFX900-NEXT:    v_perm_b32 v1, v2, v2, s4575; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:4576; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]577; GFX900-NEXT:    s_waitcnt vmcnt(0)578; GFX900-NEXT:    s_setpc_b64 s[30:31]579;580; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_0:581; GFX90A:       ; %bb.0:582; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX90A-NEXT:    v_mov_b32_e32 v4, 0584; GFX90A-NEXT:    ;;#ASMSTART585; GFX90A-NEXT:    ; def v[0:1]586; GFX90A-NEXT:    ;;#ASMEND587; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100588; GFX90A-NEXT:    ;;#ASMSTART589; GFX90A-NEXT:    ; def v[2:3]590; GFX90A-NEXT:    ;;#ASMEND591; GFX90A-NEXT:    v_perm_b32 v1, v3, v3, s4592; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:4593; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]594; GFX90A-NEXT:    s_waitcnt vmcnt(0)595; GFX90A-NEXT:    s_setpc_b64 s[30:31]596;597; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_0:598; GFX942:       ; %bb.0:599; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)600; GFX942-NEXT:    v_mov_b32_e32 v4, 0601; GFX942-NEXT:    ;;#ASMSTART602; GFX942-NEXT:    ; def v[0:1]603; GFX942-NEXT:    ;;#ASMEND604; GFX942-NEXT:    s_mov_b32 s2, 0x5040100605; GFX942-NEXT:    ;;#ASMSTART606; GFX942-NEXT:    ; def v[2:3]607; GFX942-NEXT:    ;;#ASMEND608; GFX942-NEXT:    s_nop 0609; GFX942-NEXT:    v_perm_b32 v1, v3, v3, s2610; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:4611; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]612; GFX942-NEXT:    s_waitcnt vmcnt(0)613; GFX942-NEXT:    s_setpc_b64 s[30:31]614  %vec0 = call <4 x i16> asm "; def $0", "=v"()615  %vec1 = call <4 x i16> asm "; def $0", "=v"()616  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>617  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>618  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 0>619  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8620  ret void621}622 623define void @v_shuffle_v3i16_v3i16__5_5_1(ptr addrspace(1) inreg %ptr) {624; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_1:625; GFX900:       ; %bb.0:626; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)627; GFX900-NEXT:    ;;#ASMSTART628; GFX900-NEXT:    ; def v[0:1]629; GFX900-NEXT:    ;;#ASMEND630; GFX900-NEXT:    v_mov_b32_e32 v3, 0631; GFX900-NEXT:    ;;#ASMSTART632; GFX900-NEXT:    ; def v[1:2]633; GFX900-NEXT:    ;;#ASMEND634; GFX900-NEXT:    s_mov_b32 s4, 0x5040100635; GFX900-NEXT:    v_perm_b32 v1, v2, v2, s4636; GFX900-NEXT:    global_store_short_d16_hi v3, v0, s[16:17] offset:4637; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]638; GFX900-NEXT:    s_waitcnt vmcnt(0)639; GFX900-NEXT:    s_setpc_b64 s[30:31]640;641; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_1:642; GFX90A:       ; %bb.0:643; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)644; GFX90A-NEXT:    v_mov_b32_e32 v4, 0645; GFX90A-NEXT:    ;;#ASMSTART646; GFX90A-NEXT:    ; def v[0:1]647; GFX90A-NEXT:    ;;#ASMEND648; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100649; GFX90A-NEXT:    ;;#ASMSTART650; GFX90A-NEXT:    ; def v[2:3]651; GFX90A-NEXT:    ;;#ASMEND652; GFX90A-NEXT:    v_perm_b32 v1, v3, v3, s4653; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:4654; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]655; GFX90A-NEXT:    s_waitcnt vmcnt(0)656; GFX90A-NEXT:    s_setpc_b64 s[30:31]657;658; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_1:659; GFX942:       ; %bb.0:660; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)661; GFX942-NEXT:    v_mov_b32_e32 v4, 0662; GFX942-NEXT:    ;;#ASMSTART663; GFX942-NEXT:    ; def v[0:1]664; GFX942-NEXT:    ;;#ASMEND665; GFX942-NEXT:    s_mov_b32 s2, 0x5040100666; GFX942-NEXT:    ;;#ASMSTART667; GFX942-NEXT:    ; def v[2:3]668; GFX942-NEXT:    ;;#ASMEND669; GFX942-NEXT:    s_nop 0670; GFX942-NEXT:    v_perm_b32 v1, v3, v3, s2671; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:4672; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]673; GFX942-NEXT:    s_waitcnt vmcnt(0)674; GFX942-NEXT:    s_setpc_b64 s[30:31]675  %vec0 = call <4 x i16> asm "; def $0", "=v"()676  %vec1 = call <4 x i16> asm "; def $0", "=v"()677  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>678  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>679  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 1>680  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8681  ret void682}683 684define void @v_shuffle_v3i16_v3i16__5_5_2(ptr addrspace(1) inreg %ptr) {685; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_2:686; GFX900:       ; %bb.0:687; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)688; GFX900-NEXT:    v_mov_b32_e32 v4, 0689; GFX900-NEXT:    ;;#ASMSTART690; GFX900-NEXT:    ; def v[0:1]691; GFX900-NEXT:    ;;#ASMEND692; GFX900-NEXT:    s_mov_b32 s4, 0x5040100693; GFX900-NEXT:    ;;#ASMSTART694; GFX900-NEXT:    ; def v[2:3]695; GFX900-NEXT:    ;;#ASMEND696; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4697; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:4698; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]699; GFX900-NEXT:    s_waitcnt vmcnt(0)700; GFX900-NEXT:    s_setpc_b64 s[30:31]701;702; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_2:703; GFX90A:       ; %bb.0:704; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)705; GFX90A-NEXT:    v_mov_b32_e32 v4, 0706; GFX90A-NEXT:    ;;#ASMSTART707; GFX90A-NEXT:    ; def v[0:1]708; GFX90A-NEXT:    ;;#ASMEND709; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100710; GFX90A-NEXT:    ;;#ASMSTART711; GFX90A-NEXT:    ; def v[2:3]712; GFX90A-NEXT:    ;;#ASMEND713; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4714; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:4715; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]716; GFX90A-NEXT:    s_waitcnt vmcnt(0)717; GFX90A-NEXT:    s_setpc_b64 s[30:31]718;719; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_2:720; GFX942:       ; %bb.0:721; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)722; GFX942-NEXT:    v_mov_b32_e32 v4, 0723; GFX942-NEXT:    ;;#ASMSTART724; GFX942-NEXT:    ; def v[0:1]725; GFX942-NEXT:    ;;#ASMEND726; GFX942-NEXT:    s_mov_b32 s2, 0x5040100727; GFX942-NEXT:    ;;#ASMSTART728; GFX942-NEXT:    ; def v[2:3]729; GFX942-NEXT:    ;;#ASMEND730; GFX942-NEXT:    s_nop 0731; GFX942-NEXT:    v_perm_b32 v0, v3, v3, s2732; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:4733; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]734; GFX942-NEXT:    s_waitcnt vmcnt(0)735; GFX942-NEXT:    s_setpc_b64 s[30:31]736  %vec0 = call <4 x i16> asm "; def $0", "=v"()737  %vec1 = call <4 x i16> asm "; def $0", "=v"()738  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>739  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>740  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 2>741  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8742  ret void743}744 745define void @v_shuffle_v3i16_v3i16__5_5_3(ptr addrspace(1) inreg %ptr) {746; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_3:747; GFX900:       ; %bb.0:748; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)749; GFX900-NEXT:    v_mov_b32_e32 v2, 0750; GFX900-NEXT:    ;;#ASMSTART751; GFX900-NEXT:    ; def v[0:1]752; GFX900-NEXT:    ;;#ASMEND753; GFX900-NEXT:    s_mov_b32 s4, 0x5040100754; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4755; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:4756; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]757; GFX900-NEXT:    s_waitcnt vmcnt(0)758; GFX900-NEXT:    s_setpc_b64 s[30:31]759;760; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_3:761; GFX90A:       ; %bb.0:762; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)763; GFX90A-NEXT:    v_mov_b32_e32 v2, 0764; GFX90A-NEXT:    ;;#ASMSTART765; GFX90A-NEXT:    ; def v[0:1]766; GFX90A-NEXT:    ;;#ASMEND767; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100768; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4769; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:4770; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]771; GFX90A-NEXT:    s_waitcnt vmcnt(0)772; GFX90A-NEXT:    s_setpc_b64 s[30:31]773;774; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_3:775; GFX942:       ; %bb.0:776; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)777; GFX942-NEXT:    v_mov_b32_e32 v2, 0778; GFX942-NEXT:    ;;#ASMSTART779; GFX942-NEXT:    ; def v[0:1]780; GFX942-NEXT:    ;;#ASMEND781; GFX942-NEXT:    s_mov_b32 s2, 0x5040100782; GFX942-NEXT:    v_perm_b32 v1, v1, v1, s2783; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:4784; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]785; GFX942-NEXT:    s_waitcnt vmcnt(0)786; GFX942-NEXT:    s_setpc_b64 s[30:31]787  %vec0 = call <4 x i16> asm "; def $0", "=v"()788  %vec1 = call <4 x i16> asm "; def $0", "=v"()789  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>790  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>791  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 3>792  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8793  ret void794}795 796define void @v_shuffle_v3i16_v3i16__5_5_4(ptr addrspace(1) inreg %ptr) {797; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_4:798; GFX900:       ; %bb.0:799; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)800; GFX900-NEXT:    v_mov_b32_e32 v2, 0801; GFX900-NEXT:    ;;#ASMSTART802; GFX900-NEXT:    ; def v[0:1]803; GFX900-NEXT:    ;;#ASMEND804; GFX900-NEXT:    s_mov_b32 s4, 0x5040100805; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4806; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:4807; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]808; GFX900-NEXT:    s_waitcnt vmcnt(0)809; GFX900-NEXT:    s_setpc_b64 s[30:31]810;811; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_4:812; GFX90A:       ; %bb.0:813; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)814; GFX90A-NEXT:    v_mov_b32_e32 v2, 0815; GFX90A-NEXT:    ;;#ASMSTART816; GFX90A-NEXT:    ; def v[0:1]817; GFX90A-NEXT:    ;;#ASMEND818; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100819; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4820; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:4821; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]822; GFX90A-NEXT:    s_waitcnt vmcnt(0)823; GFX90A-NEXT:    s_setpc_b64 s[30:31]824;825; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_4:826; GFX942:       ; %bb.0:827; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX942-NEXT:    v_mov_b32_e32 v2, 0829; GFX942-NEXT:    ;;#ASMSTART830; GFX942-NEXT:    ; def v[0:1]831; GFX942-NEXT:    ;;#ASMEND832; GFX942-NEXT:    s_mov_b32 s2, 0x5040100833; GFX942-NEXT:    v_perm_b32 v1, v1, v1, s2834; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:4835; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]836; GFX942-NEXT:    s_waitcnt vmcnt(0)837; GFX942-NEXT:    s_setpc_b64 s[30:31]838  %vec0 = call <4 x i16> asm "; def $0", "=v"()839  %vec1 = call <4 x i16> asm "; def $0", "=v"()840  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>841  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>842  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 4>843  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8844  ret void845}846 847define void @v_shuffle_v3i16_v3i16__5_5_5(ptr addrspace(1) inreg %ptr) {848; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_5_5:849; GFX900:       ; %bb.0:850; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)851; GFX900-NEXT:    v_mov_b32_e32 v2, 0852; GFX900-NEXT:    ;;#ASMSTART853; GFX900-NEXT:    ; def v[0:1]854; GFX900-NEXT:    ;;#ASMEND855; GFX900-NEXT:    s_mov_b32 s4, 0x5040100856; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4857; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:4858; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]859; GFX900-NEXT:    s_waitcnt vmcnt(0)860; GFX900-NEXT:    s_setpc_b64 s[30:31]861;862; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_5_5:863; GFX90A:       ; %bb.0:864; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)865; GFX90A-NEXT:    v_mov_b32_e32 v2, 0866; GFX90A-NEXT:    ;;#ASMSTART867; GFX90A-NEXT:    ; def v[0:1]868; GFX90A-NEXT:    ;;#ASMEND869; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100870; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4871; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:4872; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]873; GFX90A-NEXT:    s_waitcnt vmcnt(0)874; GFX90A-NEXT:    s_setpc_b64 s[30:31]875;876; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_5_5:877; GFX942:       ; %bb.0:878; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX942-NEXT:    v_mov_b32_e32 v2, 0880; GFX942-NEXT:    ;;#ASMSTART881; GFX942-NEXT:    ; def v[0:1]882; GFX942-NEXT:    ;;#ASMEND883; GFX942-NEXT:    s_mov_b32 s2, 0x5040100884; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s2885; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:4886; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]887; GFX942-NEXT:    s_waitcnt vmcnt(0)888; GFX942-NEXT:    s_setpc_b64 s[30:31]889  %vec0 = call <4 x i16> asm "; def $0", "=v"()890  %vec1 = call <4 x i16> asm "; def $0", "=v"()891  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>892  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>893  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 5>894  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8895  ret void896}897 898define void @v_shuffle_v3i16_v3i16__u_0_0(ptr addrspace(1) inreg %ptr) {899; GFX900-LABEL: v_shuffle_v3i16_v3i16__u_0_0:900; GFX900:       ; %bb.0:901; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)902; GFX900-NEXT:    v_mov_b32_e32 v2, 0903; GFX900-NEXT:    ;;#ASMSTART904; GFX900-NEXT:    ; def v[0:1]905; GFX900-NEXT:    ;;#ASMEND906; GFX900-NEXT:    v_lshlrev_b32_e32 v1, 16, v0907; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:4908; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]909; GFX900-NEXT:    s_waitcnt vmcnt(0)910; GFX900-NEXT:    s_setpc_b64 s[30:31]911;912; GFX90A-LABEL: v_shuffle_v3i16_v3i16__u_0_0:913; GFX90A:       ; %bb.0:914; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GFX90A-NEXT:    v_mov_b32_e32 v2, 0916; GFX90A-NEXT:    ;;#ASMSTART917; GFX90A-NEXT:    ; def v[0:1]918; GFX90A-NEXT:    ;;#ASMEND919; GFX90A-NEXT:    v_lshlrev_b32_e32 v1, 16, v0920; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:4921; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]922; GFX90A-NEXT:    s_waitcnt vmcnt(0)923; GFX90A-NEXT:    s_setpc_b64 s[30:31]924;925; GFX942-LABEL: v_shuffle_v3i16_v3i16__u_0_0:926; GFX942:       ; %bb.0:927; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)928; GFX942-NEXT:    v_mov_b32_e32 v2, 0929; GFX942-NEXT:    ;;#ASMSTART930; GFX942-NEXT:    ; def v[0:1]931; GFX942-NEXT:    ;;#ASMEND932; GFX942-NEXT:    s_nop 0933; GFX942-NEXT:    v_lshlrev_b32_e32 v1, 16, v0934; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:4935; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]936; GFX942-NEXT:    s_waitcnt vmcnt(0)937; GFX942-NEXT:    s_setpc_b64 s[30:31]938  %vec0 = call <4 x i16> asm "; def $0", "=v"()939  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>940  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>941  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8942  ret void943}944 945define void @v_shuffle_v3i16_v3i16__0_0_0(ptr addrspace(1) inreg %ptr) {946; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_0_0:947; GFX900:       ; %bb.0:948; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)949; GFX900-NEXT:    v_mov_b32_e32 v2, 0950; GFX900-NEXT:    ;;#ASMSTART951; GFX900-NEXT:    ; def v[0:1]952; GFX900-NEXT:    ;;#ASMEND953; GFX900-NEXT:    s_mov_b32 s4, 0x5040100954; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4955; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:4956; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]957; GFX900-NEXT:    s_waitcnt vmcnt(0)958; GFX900-NEXT:    s_setpc_b64 s[30:31]959;960; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_0_0:961; GFX90A:       ; %bb.0:962; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)963; GFX90A-NEXT:    v_mov_b32_e32 v2, 0964; GFX90A-NEXT:    ;;#ASMSTART965; GFX90A-NEXT:    ; def v[0:1]966; GFX90A-NEXT:    ;;#ASMEND967; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100968; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4969; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:4970; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]971; GFX90A-NEXT:    s_waitcnt vmcnt(0)972; GFX90A-NEXT:    s_setpc_b64 s[30:31]973;974; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_0_0:975; GFX942:       ; %bb.0:976; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)977; GFX942-NEXT:    v_mov_b32_e32 v2, 0978; GFX942-NEXT:    ;;#ASMSTART979; GFX942-NEXT:    ; def v[0:1]980; GFX942-NEXT:    ;;#ASMEND981; GFX942-NEXT:    s_mov_b32 s2, 0x5040100982; GFX942-NEXT:    v_perm_b32 v1, v0, v0, s2983; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:4984; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]985; GFX942-NEXT:    s_waitcnt vmcnt(0)986; GFX942-NEXT:    s_setpc_b64 s[30:31]987  %vec0 = call <4 x i16> asm "; def $0", "=v"()988  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>989  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> zeroinitializer990  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8991  ret void992}993 994define void @v_shuffle_v3i16_v3i16__1_0_0(ptr addrspace(1) inreg %ptr) {995; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_0_0:996; GFX900:       ; %bb.0:997; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)998; GFX900-NEXT:    v_mov_b32_e32 v2, 0999; GFX900-NEXT:    ;;#ASMSTART1000; GFX900-NEXT:    ; def v[0:1]1001; GFX900-NEXT:    ;;#ASMEND1002; GFX900-NEXT:    v_alignbit_b32 v1, v0, v0, 161003; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:41004; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1005; GFX900-NEXT:    s_waitcnt vmcnt(0)1006; GFX900-NEXT:    s_setpc_b64 s[30:31]1007;1008; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_0_0:1009; GFX90A:       ; %bb.0:1010; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1011; GFX90A-NEXT:    v_mov_b32_e32 v2, 01012; GFX90A-NEXT:    ;;#ASMSTART1013; GFX90A-NEXT:    ; def v[0:1]1014; GFX90A-NEXT:    ;;#ASMEND1015; GFX90A-NEXT:    v_alignbit_b32 v1, v0, v0, 161016; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:41017; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1018; GFX90A-NEXT:    s_waitcnt vmcnt(0)1019; GFX90A-NEXT:    s_setpc_b64 s[30:31]1020;1021; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_0_0:1022; GFX942:       ; %bb.0:1023; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1024; GFX942-NEXT:    v_mov_b32_e32 v2, 01025; GFX942-NEXT:    ;;#ASMSTART1026; GFX942-NEXT:    ; def v[0:1]1027; GFX942-NEXT:    ;;#ASMEND1028; GFX942-NEXT:    s_nop 01029; GFX942-NEXT:    v_alignbit_b32 v1, v0, v0, 161030; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:41031; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1032; GFX942-NEXT:    s_waitcnt vmcnt(0)1033; GFX942-NEXT:    s_setpc_b64 s[30:31]1034  %vec0 = call <4 x i16> asm "; def $0", "=v"()1035  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1036  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>1037  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81038  ret void1039}1040 1041define void @v_shuffle_v3i16_v3i16__2_0_0(ptr addrspace(1) inreg %ptr) {1042; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_0_0:1043; GFX900:       ; %bb.0:1044; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1045; GFX900-NEXT:    v_mov_b32_e32 v2, 01046; GFX900-NEXT:    ;;#ASMSTART1047; GFX900-NEXT:    ; def v[0:1]1048; GFX900-NEXT:    ;;#ASMEND1049; GFX900-NEXT:    s_mov_b32 s4, 0x50401001050; GFX900-NEXT:    v_perm_b32 v1, v0, v1, s41051; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:41052; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1053; GFX900-NEXT:    s_waitcnt vmcnt(0)1054; GFX900-NEXT:    s_setpc_b64 s[30:31]1055;1056; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_0_0:1057; GFX90A:       ; %bb.0:1058; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1059; GFX90A-NEXT:    v_mov_b32_e32 v2, 01060; GFX90A-NEXT:    ;;#ASMSTART1061; GFX90A-NEXT:    ; def v[0:1]1062; GFX90A-NEXT:    ;;#ASMEND1063; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001064; GFX90A-NEXT:    v_perm_b32 v1, v0, v1, s41065; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:41066; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1067; GFX90A-NEXT:    s_waitcnt vmcnt(0)1068; GFX90A-NEXT:    s_setpc_b64 s[30:31]1069;1070; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_0_0:1071; GFX942:       ; %bb.0:1072; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1073; GFX942-NEXT:    v_mov_b32_e32 v2, 01074; GFX942-NEXT:    ;;#ASMSTART1075; GFX942-NEXT:    ; def v[0:1]1076; GFX942-NEXT:    ;;#ASMEND1077; GFX942-NEXT:    s_mov_b32 s2, 0x50401001078; GFX942-NEXT:    v_perm_b32 v1, v0, v1, s21079; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:41080; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1081; GFX942-NEXT:    s_waitcnt vmcnt(0)1082; GFX942-NEXT:    s_setpc_b64 s[30:31]1083  %vec0 = call <4 x i16> asm "; def $0", "=v"()1084  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1085  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>1086  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81087  ret void1088}1089 1090define void @v_shuffle_v3i16_v3i16__3_0_0(ptr addrspace(1) inreg %ptr) {1091; GFX900-LABEL: v_shuffle_v3i16_v3i16__3_0_0:1092; GFX900:       ; %bb.0:1093; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1094; GFX900-NEXT:    v_mov_b32_e32 v2, 01095; GFX900-NEXT:    ;;#ASMSTART1096; GFX900-NEXT:    ; def v[0:1]1097; GFX900-NEXT:    ;;#ASMEND1098; GFX900-NEXT:    v_lshlrev_b32_e32 v1, 16, v01099; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:41100; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1101; GFX900-NEXT:    s_waitcnt vmcnt(0)1102; GFX900-NEXT:    s_setpc_b64 s[30:31]1103;1104; GFX90A-LABEL: v_shuffle_v3i16_v3i16__3_0_0:1105; GFX90A:       ; %bb.0:1106; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1107; GFX90A-NEXT:    v_mov_b32_e32 v2, 01108; GFX90A-NEXT:    ;;#ASMSTART1109; GFX90A-NEXT:    ; def v[0:1]1110; GFX90A-NEXT:    ;;#ASMEND1111; GFX90A-NEXT:    v_lshlrev_b32_e32 v1, 16, v01112; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:41113; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1114; GFX90A-NEXT:    s_waitcnt vmcnt(0)1115; GFX90A-NEXT:    s_setpc_b64 s[30:31]1116;1117; GFX942-LABEL: v_shuffle_v3i16_v3i16__3_0_0:1118; GFX942:       ; %bb.0:1119; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1120; GFX942-NEXT:    v_mov_b32_e32 v2, 01121; GFX942-NEXT:    ;;#ASMSTART1122; GFX942-NEXT:    ; def v[0:1]1123; GFX942-NEXT:    ;;#ASMEND1124; GFX942-NEXT:    s_nop 01125; GFX942-NEXT:    v_lshlrev_b32_e32 v1, 16, v01126; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:41127; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1128; GFX942-NEXT:    s_waitcnt vmcnt(0)1129; GFX942-NEXT:    s_setpc_b64 s[30:31]1130  %vec0 = call <4 x i16> asm "; def $0", "=v"()1131  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1132  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 0, i32 0>1133  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81134  ret void1135}1136 1137define void @v_shuffle_v3i16_v3i16__4_0_0(ptr addrspace(1) inreg %ptr) {1138; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_0_0:1139; GFX900:       ; %bb.0:1140; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1141; GFX900-NEXT:    ;;#ASMSTART1142; GFX900-NEXT:    ; def v[0:1]1143; GFX900-NEXT:    ;;#ASMEND1144; GFX900-NEXT:    v_mov_b32_e32 v3, 01145; GFX900-NEXT:    ;;#ASMSTART1146; GFX900-NEXT:    ; def v[1:2]1147; GFX900-NEXT:    ;;#ASMEND1148; GFX900-NEXT:    v_alignbit_b32 v1, v0, v1, 161149; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41150; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1151; GFX900-NEXT:    s_waitcnt vmcnt(0)1152; GFX900-NEXT:    s_setpc_b64 s[30:31]1153;1154; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_0_0:1155; GFX90A:       ; %bb.0:1156; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1157; GFX90A-NEXT:    v_mov_b32_e32 v4, 01158; GFX90A-NEXT:    ;;#ASMSTART1159; GFX90A-NEXT:    ; def v[0:1]1160; GFX90A-NEXT:    ;;#ASMEND1161; GFX90A-NEXT:    ;;#ASMSTART1162; GFX90A-NEXT:    ; def v[2:3]1163; GFX90A-NEXT:    ;;#ASMEND1164; GFX90A-NEXT:    v_alignbit_b32 v1, v0, v2, 161165; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41166; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1167; GFX90A-NEXT:    s_waitcnt vmcnt(0)1168; GFX90A-NEXT:    s_setpc_b64 s[30:31]1169;1170; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_0_0:1171; GFX942:       ; %bb.0:1172; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1173; GFX942-NEXT:    v_mov_b32_e32 v4, 01174; GFX942-NEXT:    ;;#ASMSTART1175; GFX942-NEXT:    ; def v[0:1]1176; GFX942-NEXT:    ;;#ASMEND1177; GFX942-NEXT:    ;;#ASMSTART1178; GFX942-NEXT:    ; def v[2:3]1179; GFX942-NEXT:    ;;#ASMEND1180; GFX942-NEXT:    s_nop 01181; GFX942-NEXT:    v_alignbit_b32 v1, v0, v2, 161182; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41183; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1184; GFX942-NEXT:    s_waitcnt vmcnt(0)1185; GFX942-NEXT:    s_setpc_b64 s[30:31]1186  %vec0 = call <4 x i16> asm "; def $0", "=v"()1187  %vec1 = call <4 x i16> asm "; def $0", "=v"()1188  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1189  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1190  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 0, i32 0>1191  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81192  ret void1193}1194 1195define void @v_shuffle_v3i16_v3i16__5_0_0(ptr addrspace(1) inreg %ptr) {1196; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_0:1197; GFX900:       ; %bb.0:1198; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1199; GFX900-NEXT:    ;;#ASMSTART1200; GFX900-NEXT:    ; def v[0:1]1201; GFX900-NEXT:    ;;#ASMEND1202; GFX900-NEXT:    v_mov_b32_e32 v3, 01203; GFX900-NEXT:    ;;#ASMSTART1204; GFX900-NEXT:    ; def v[1:2]1205; GFX900-NEXT:    ;;#ASMEND1206; GFX900-NEXT:    s_mov_b32 s4, 0x50401001207; GFX900-NEXT:    v_perm_b32 v1, v0, v2, s41208; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41209; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1210; GFX900-NEXT:    s_waitcnt vmcnt(0)1211; GFX900-NEXT:    s_setpc_b64 s[30:31]1212;1213; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_0:1214; GFX90A:       ; %bb.0:1215; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1216; GFX90A-NEXT:    v_mov_b32_e32 v4, 01217; GFX90A-NEXT:    ;;#ASMSTART1218; GFX90A-NEXT:    ; def v[0:1]1219; GFX90A-NEXT:    ;;#ASMEND1220; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001221; GFX90A-NEXT:    ;;#ASMSTART1222; GFX90A-NEXT:    ; def v[2:3]1223; GFX90A-NEXT:    ;;#ASMEND1224; GFX90A-NEXT:    v_perm_b32 v1, v0, v3, s41225; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41226; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1227; GFX90A-NEXT:    s_waitcnt vmcnt(0)1228; GFX90A-NEXT:    s_setpc_b64 s[30:31]1229;1230; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_0:1231; GFX942:       ; %bb.0:1232; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1233; GFX942-NEXT:    v_mov_b32_e32 v4, 01234; GFX942-NEXT:    ;;#ASMSTART1235; GFX942-NEXT:    ; def v[0:1]1236; GFX942-NEXT:    ;;#ASMEND1237; GFX942-NEXT:    s_mov_b32 s2, 0x50401001238; GFX942-NEXT:    ;;#ASMSTART1239; GFX942-NEXT:    ; def v[2:3]1240; GFX942-NEXT:    ;;#ASMEND1241; GFX942-NEXT:    s_nop 01242; GFX942-NEXT:    v_perm_b32 v1, v0, v3, s21243; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41244; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1245; GFX942-NEXT:    s_waitcnt vmcnt(0)1246; GFX942-NEXT:    s_setpc_b64 s[30:31]1247  %vec0 = call <4 x i16> asm "; def $0", "=v"()1248  %vec1 = call <4 x i16> asm "; def $0", "=v"()1249  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1250  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1251  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 0>1252  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81253  ret void1254}1255 1256define void @v_shuffle_v3i16_v3i16__5_u_0(ptr addrspace(1) inreg %ptr) {1257; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_0:1258; GFX900:       ; %bb.0:1259; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1260; GFX900-NEXT:    v_mov_b32_e32 v3, 01261; GFX900-NEXT:    ;;#ASMSTART1262; GFX900-NEXT:    ; def v[0:1]1263; GFX900-NEXT:    ;;#ASMEND1264; GFX900-NEXT:    ;;#ASMSTART1265; GFX900-NEXT:    ; def v[1:2]1266; GFX900-NEXT:    ;;#ASMEND1267; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41268; GFX900-NEXT:    global_store_dword v3, v2, s[16:17]1269; GFX900-NEXT:    s_waitcnt vmcnt(0)1270; GFX900-NEXT:    s_setpc_b64 s[30:31]1271;1272; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_0:1273; GFX90A:       ; %bb.0:1274; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1275; GFX90A-NEXT:    v_mov_b32_e32 v4, 01276; GFX90A-NEXT:    ;;#ASMSTART1277; GFX90A-NEXT:    ; def v[0:1]1278; GFX90A-NEXT:    ;;#ASMEND1279; GFX90A-NEXT:    ;;#ASMSTART1280; GFX90A-NEXT:    ; def v[2:3]1281; GFX90A-NEXT:    ;;#ASMEND1282; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41283; GFX90A-NEXT:    global_store_dword v4, v3, s[16:17]1284; GFX90A-NEXT:    s_waitcnt vmcnt(0)1285; GFX90A-NEXT:    s_setpc_b64 s[30:31]1286;1287; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_0:1288; GFX942:       ; %bb.0:1289; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1290; GFX942-NEXT:    v_mov_b32_e32 v4, 01291; GFX942-NEXT:    ;;#ASMSTART1292; GFX942-NEXT:    ; def v[0:1]1293; GFX942-NEXT:    ;;#ASMEND1294; GFX942-NEXT:    ;;#ASMSTART1295; GFX942-NEXT:    ; def v[2:3]1296; GFX942-NEXT:    ;;#ASMEND1297; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41298; GFX942-NEXT:    global_store_dword v4, v3, s[0:1]1299; GFX942-NEXT:    s_waitcnt vmcnt(0)1300; GFX942-NEXT:    s_setpc_b64 s[30:31]1301  %vec0 = call <4 x i16> asm "; def $0", "=v"()1302  %vec1 = call <4 x i16> asm "; def $0", "=v"()1303  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1304  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1305  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 0>1306  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81307  ret void1308}1309 1310define void @v_shuffle_v3i16_v3i16__5_1_0(ptr addrspace(1) inreg %ptr) {1311; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_0:1312; GFX900:       ; %bb.0:1313; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1314; GFX900-NEXT:    ;;#ASMSTART1315; GFX900-NEXT:    ; def v[0:1]1316; GFX900-NEXT:    ;;#ASMEND1317; GFX900-NEXT:    v_mov_b32_e32 v3, 01318; GFX900-NEXT:    ;;#ASMSTART1319; GFX900-NEXT:    ; def v[1:2]1320; GFX900-NEXT:    ;;#ASMEND1321; GFX900-NEXT:    s_mov_b32 s4, 0xffff1322; GFX900-NEXT:    v_bfi_b32 v1, s4, v2, v01323; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41324; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1325; GFX900-NEXT:    s_waitcnt vmcnt(0)1326; GFX900-NEXT:    s_setpc_b64 s[30:31]1327;1328; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_0:1329; GFX90A:       ; %bb.0:1330; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1331; GFX90A-NEXT:    v_mov_b32_e32 v4, 01332; GFX90A-NEXT:    ;;#ASMSTART1333; GFX90A-NEXT:    ; def v[0:1]1334; GFX90A-NEXT:    ;;#ASMEND1335; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1336; GFX90A-NEXT:    ;;#ASMSTART1337; GFX90A-NEXT:    ; def v[2:3]1338; GFX90A-NEXT:    ;;#ASMEND1339; GFX90A-NEXT:    v_bfi_b32 v1, s4, v3, v01340; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41341; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1342; GFX90A-NEXT:    s_waitcnt vmcnt(0)1343; GFX90A-NEXT:    s_setpc_b64 s[30:31]1344;1345; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_0:1346; GFX942:       ; %bb.0:1347; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1348; GFX942-NEXT:    v_mov_b32_e32 v4, 01349; GFX942-NEXT:    ;;#ASMSTART1350; GFX942-NEXT:    ; def v[0:1]1351; GFX942-NEXT:    ;;#ASMEND1352; GFX942-NEXT:    s_mov_b32 s2, 0xffff1353; GFX942-NEXT:    ;;#ASMSTART1354; GFX942-NEXT:    ; def v[2:3]1355; GFX942-NEXT:    ;;#ASMEND1356; GFX942-NEXT:    s_nop 01357; GFX942-NEXT:    v_bfi_b32 v1, s2, v3, v01358; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41359; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1360; GFX942-NEXT:    s_waitcnt vmcnt(0)1361; GFX942-NEXT:    s_setpc_b64 s[30:31]1362  %vec0 = call <4 x i16> asm "; def $0", "=v"()1363  %vec1 = call <4 x i16> asm "; def $0", "=v"()1364  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1365  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1366  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 0>1367  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81368  ret void1369}1370 1371define void @v_shuffle_v3i16_v3i16__5_2_0(ptr addrspace(1) inreg %ptr) {1372; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_0:1373; GFX900:       ; %bb.0:1374; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1375; GFX900-NEXT:    v_mov_b32_e32 v4, 01376; GFX900-NEXT:    ;;#ASMSTART1377; GFX900-NEXT:    ; def v[0:1]1378; GFX900-NEXT:    ;;#ASMEND1379; GFX900-NEXT:    s_mov_b32 s4, 0x50401001380; GFX900-NEXT:    ;;#ASMSTART1381; GFX900-NEXT:    ; def v[2:3]1382; GFX900-NEXT:    ;;#ASMEND1383; GFX900-NEXT:    v_perm_b32 v1, v1, v3, s41384; GFX900-NEXT:    global_store_short v4, v0, s[16:17] offset:41385; GFX900-NEXT:    global_store_dword v4, v1, s[16:17]1386; GFX900-NEXT:    s_waitcnt vmcnt(0)1387; GFX900-NEXT:    s_setpc_b64 s[30:31]1388;1389; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_0:1390; GFX90A:       ; %bb.0:1391; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX90A-NEXT:    v_mov_b32_e32 v4, 01393; GFX90A-NEXT:    ;;#ASMSTART1394; GFX90A-NEXT:    ; def v[0:1]1395; GFX90A-NEXT:    ;;#ASMEND1396; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001397; GFX90A-NEXT:    ;;#ASMSTART1398; GFX90A-NEXT:    ; def v[2:3]1399; GFX90A-NEXT:    ;;#ASMEND1400; GFX90A-NEXT:    v_perm_b32 v1, v1, v3, s41401; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41402; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1403; GFX90A-NEXT:    s_waitcnt vmcnt(0)1404; GFX90A-NEXT:    s_setpc_b64 s[30:31]1405;1406; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_0:1407; GFX942:       ; %bb.0:1408; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1409; GFX942-NEXT:    v_mov_b32_e32 v4, 01410; GFX942-NEXT:    ;;#ASMSTART1411; GFX942-NEXT:    ; def v[0:1]1412; GFX942-NEXT:    ;;#ASMEND1413; GFX942-NEXT:    s_mov_b32 s2, 0x50401001414; GFX942-NEXT:    ;;#ASMSTART1415; GFX942-NEXT:    ; def v[2:3]1416; GFX942-NEXT:    ;;#ASMEND1417; GFX942-NEXT:    s_nop 01418; GFX942-NEXT:    v_perm_b32 v1, v1, v3, s21419; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41420; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1421; GFX942-NEXT:    s_waitcnt vmcnt(0)1422; GFX942-NEXT:    s_setpc_b64 s[30:31]1423  %vec0 = call <4 x i16> asm "; def $0", "=v"()1424  %vec1 = call <4 x i16> asm "; def $0", "=v"()1425  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1426  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1427  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 0>1428  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81429  ret void1430}1431 1432define void @v_shuffle_v3i16_v3i16__5_3_0(ptr addrspace(1) inreg %ptr) {1433; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_0:1434; GFX900:       ; %bb.0:1435; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1436; GFX900-NEXT:    ;;#ASMSTART1437; GFX900-NEXT:    ; def v[0:1]1438; GFX900-NEXT:    ;;#ASMEND1439; GFX900-NEXT:    v_mov_b32_e32 v3, 01440; GFX900-NEXT:    ;;#ASMSTART1441; GFX900-NEXT:    ; def v[1:2]1442; GFX900-NEXT:    ;;#ASMEND1443; GFX900-NEXT:    s_mov_b32 s4, 0x50401001444; GFX900-NEXT:    v_perm_b32 v1, v1, v2, s41445; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41446; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1447; GFX900-NEXT:    s_waitcnt vmcnt(0)1448; GFX900-NEXT:    s_setpc_b64 s[30:31]1449;1450; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_0:1451; GFX90A:       ; %bb.0:1452; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1453; GFX90A-NEXT:    v_mov_b32_e32 v4, 01454; GFX90A-NEXT:    ;;#ASMSTART1455; GFX90A-NEXT:    ; def v[0:1]1456; GFX90A-NEXT:    ;;#ASMEND1457; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001458; GFX90A-NEXT:    ;;#ASMSTART1459; GFX90A-NEXT:    ; def v[2:3]1460; GFX90A-NEXT:    ;;#ASMEND1461; GFX90A-NEXT:    v_perm_b32 v1, v2, v3, s41462; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41463; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1464; GFX90A-NEXT:    s_waitcnt vmcnt(0)1465; GFX90A-NEXT:    s_setpc_b64 s[30:31]1466;1467; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_0:1468; GFX942:       ; %bb.0:1469; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1470; GFX942-NEXT:    v_mov_b32_e32 v4, 01471; GFX942-NEXT:    ;;#ASMSTART1472; GFX942-NEXT:    ; def v[0:1]1473; GFX942-NEXT:    ;;#ASMEND1474; GFX942-NEXT:    s_mov_b32 s2, 0x50401001475; GFX942-NEXT:    ;;#ASMSTART1476; GFX942-NEXT:    ; def v[2:3]1477; GFX942-NEXT:    ;;#ASMEND1478; GFX942-NEXT:    s_nop 01479; GFX942-NEXT:    v_perm_b32 v1, v2, v3, s21480; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41481; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1482; GFX942-NEXT:    s_waitcnt vmcnt(0)1483; GFX942-NEXT:    s_setpc_b64 s[30:31]1484  %vec0 = call <4 x i16> asm "; def $0", "=v"()1485  %vec1 = call <4 x i16> asm "; def $0", "=v"()1486  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1487  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1488  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 0>1489  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81490  ret void1491}1492 1493define void @v_shuffle_v3i16_v3i16__5_4_0(ptr addrspace(1) inreg %ptr) {1494; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_0:1495; GFX900:       ; %bb.0:1496; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1497; GFX900-NEXT:    ;;#ASMSTART1498; GFX900-NEXT:    ; def v[0:1]1499; GFX900-NEXT:    ;;#ASMEND1500; GFX900-NEXT:    v_mov_b32_e32 v3, 01501; GFX900-NEXT:    ;;#ASMSTART1502; GFX900-NEXT:    ; def v[1:2]1503; GFX900-NEXT:    ;;#ASMEND1504; GFX900-NEXT:    s_mov_b32 s4, 0xffff1505; GFX900-NEXT:    v_bfi_b32 v1, s4, v2, v11506; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41507; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1508; GFX900-NEXT:    s_waitcnt vmcnt(0)1509; GFX900-NEXT:    s_setpc_b64 s[30:31]1510;1511; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_0:1512; GFX90A:       ; %bb.0:1513; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1514; GFX90A-NEXT:    v_mov_b32_e32 v4, 01515; GFX90A-NEXT:    ;;#ASMSTART1516; GFX90A-NEXT:    ; def v[0:1]1517; GFX90A-NEXT:    ;;#ASMEND1518; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1519; GFX90A-NEXT:    ;;#ASMSTART1520; GFX90A-NEXT:    ; def v[2:3]1521; GFX90A-NEXT:    ;;#ASMEND1522; GFX90A-NEXT:    v_bfi_b32 v1, s4, v3, v21523; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41524; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1525; GFX90A-NEXT:    s_waitcnt vmcnt(0)1526; GFX90A-NEXT:    s_setpc_b64 s[30:31]1527;1528; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_0:1529; GFX942:       ; %bb.0:1530; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1531; GFX942-NEXT:    v_mov_b32_e32 v4, 01532; GFX942-NEXT:    ;;#ASMSTART1533; GFX942-NEXT:    ; def v[0:1]1534; GFX942-NEXT:    ;;#ASMEND1535; GFX942-NEXT:    s_mov_b32 s2, 0xffff1536; GFX942-NEXT:    ;;#ASMSTART1537; GFX942-NEXT:    ; def v[2:3]1538; GFX942-NEXT:    ;;#ASMEND1539; GFX942-NEXT:    s_nop 01540; GFX942-NEXT:    v_bfi_b32 v1, s2, v3, v21541; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41542; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1543; GFX942-NEXT:    s_waitcnt vmcnt(0)1544; GFX942-NEXT:    s_setpc_b64 s[30:31]1545  %vec0 = call <4 x i16> asm "; def $0", "=v"()1546  %vec1 = call <4 x i16> asm "; def $0", "=v"()1547  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1548  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1549  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 0>1550  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81551  ret void1552}1553 1554define void @v_shuffle_v3i16_v3i16__u_1_1(ptr addrspace(1) inreg %ptr) {1555; GFX900-LABEL: v_shuffle_v3i16_v3i16__u_1_1:1556; GFX900:       ; %bb.0:1557; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1558; GFX900-NEXT:    v_mov_b32_e32 v2, 01559; GFX900-NEXT:    ;;#ASMSTART1560; GFX900-NEXT:    ; def v[0:1]1561; GFX900-NEXT:    ;;#ASMEND1562; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41563; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1564; GFX900-NEXT:    s_waitcnt vmcnt(0)1565; GFX900-NEXT:    s_setpc_b64 s[30:31]1566;1567; GFX90A-LABEL: v_shuffle_v3i16_v3i16__u_1_1:1568; GFX90A:       ; %bb.0:1569; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1570; GFX90A-NEXT:    v_mov_b32_e32 v2, 01571; GFX90A-NEXT:    ;;#ASMSTART1572; GFX90A-NEXT:    ; def v[0:1]1573; GFX90A-NEXT:    ;;#ASMEND1574; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41575; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1576; GFX90A-NEXT:    s_waitcnt vmcnt(0)1577; GFX90A-NEXT:    s_setpc_b64 s[30:31]1578;1579; GFX942-LABEL: v_shuffle_v3i16_v3i16__u_1_1:1580; GFX942:       ; %bb.0:1581; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1582; GFX942-NEXT:    v_mov_b32_e32 v2, 01583; GFX942-NEXT:    ;;#ASMSTART1584; GFX942-NEXT:    ; def v[0:1]1585; GFX942-NEXT:    ;;#ASMEND1586; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:41587; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1588; GFX942-NEXT:    s_waitcnt vmcnt(0)1589; GFX942-NEXT:    s_setpc_b64 s[30:31]1590  %vec0 = call <4 x i16> asm "; def $0", "=v"()1591  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1592  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>1593  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81594  ret void1595}1596 1597define void @v_shuffle_v3i16_v3i16__0_1_1(ptr addrspace(1) inreg %ptr) {1598; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_1_1:1599; GFX900:       ; %bb.0:1600; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1601; GFX900-NEXT:    v_mov_b32_e32 v2, 01602; GFX900-NEXT:    ;;#ASMSTART1603; GFX900-NEXT:    ; def v[0:1]1604; GFX900-NEXT:    ;;#ASMEND1605; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41606; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1607; GFX900-NEXT:    s_waitcnt vmcnt(0)1608; GFX900-NEXT:    s_setpc_b64 s[30:31]1609;1610; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_1_1:1611; GFX90A:       ; %bb.0:1612; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1613; GFX90A-NEXT:    v_mov_b32_e32 v2, 01614; GFX90A-NEXT:    ;;#ASMSTART1615; GFX90A-NEXT:    ; def v[0:1]1616; GFX90A-NEXT:    ;;#ASMEND1617; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41618; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1619; GFX90A-NEXT:    s_waitcnt vmcnt(0)1620; GFX90A-NEXT:    s_setpc_b64 s[30:31]1621;1622; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_1_1:1623; GFX942:       ; %bb.0:1624; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1625; GFX942-NEXT:    v_mov_b32_e32 v2, 01626; GFX942-NEXT:    ;;#ASMSTART1627; GFX942-NEXT:    ; def v[0:1]1628; GFX942-NEXT:    ;;#ASMEND1629; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:41630; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1631; GFX942-NEXT:    s_waitcnt vmcnt(0)1632; GFX942-NEXT:    s_setpc_b64 s[30:31]1633  %vec0 = call <4 x i16> asm "; def $0", "=v"()1634  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1635  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>1636  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81637  ret void1638}1639 1640define void @v_shuffle_v3i16_v3i16__1_1_1(ptr addrspace(1) inreg %ptr) {1641; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_1_1:1642; GFX900:       ; %bb.0:1643; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1644; GFX900-NEXT:    ;;#ASMSTART1645; GFX900-NEXT:    ; def v[0:1]1646; GFX900-NEXT:    ;;#ASMEND1647; GFX900-NEXT:    s_mov_b32 s4, 0x70603021648; GFX900-NEXT:    v_mov_b32_e32 v2, 01649; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s41650; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v01651; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1652; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:41653; GFX900-NEXT:    s_waitcnt vmcnt(0)1654; GFX900-NEXT:    s_setpc_b64 s[30:31]1655;1656; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_1_1:1657; GFX90A:       ; %bb.0:1658; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1659; GFX90A-NEXT:    ;;#ASMSTART1660; GFX90A-NEXT:    ; def v[0:1]1661; GFX90A-NEXT:    ;;#ASMEND1662; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021663; GFX90A-NEXT:    v_mov_b32_e32 v2, 01664; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s41665; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v01666; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1667; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:41668; GFX90A-NEXT:    s_waitcnt vmcnt(0)1669; GFX90A-NEXT:    s_setpc_b64 s[30:31]1670;1671; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_1_1:1672; GFX942:       ; %bb.0:1673; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1674; GFX942-NEXT:    ;;#ASMSTART1675; GFX942-NEXT:    ; def v[0:1]1676; GFX942-NEXT:    ;;#ASMEND1677; GFX942-NEXT:    s_mov_b32 s2, 0x70603021678; GFX942-NEXT:    v_mov_b32_e32 v2, 01679; GFX942-NEXT:    v_perm_b32 v1, v0, v0, s21680; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v01681; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1682; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:41683; GFX942-NEXT:    s_waitcnt vmcnt(0)1684; GFX942-NEXT:    s_setpc_b64 s[30:31]1685  %vec0 = call <4 x i16> asm "; def $0", "=v"()1686  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1687  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>1688  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81689  ret void1690}1691 1692define void @v_shuffle_v3i16_v3i16__2_1_1(ptr addrspace(1) inreg %ptr) {1693; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_1_1:1694; GFX900:       ; %bb.0:1695; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1696; GFX900-NEXT:    ;;#ASMSTART1697; GFX900-NEXT:    ; def v[0:1]1698; GFX900-NEXT:    ;;#ASMEND1699; GFX900-NEXT:    s_mov_b32 s4, 0xffff1700; GFX900-NEXT:    v_mov_b32_e32 v2, 01701; GFX900-NEXT:    v_bfi_b32 v1, s4, v1, v01702; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v01703; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:41704; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1705; GFX900-NEXT:    s_waitcnt vmcnt(0)1706; GFX900-NEXT:    s_setpc_b64 s[30:31]1707;1708; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_1_1:1709; GFX90A:       ; %bb.0:1710; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1711; GFX90A-NEXT:    ;;#ASMSTART1712; GFX90A-NEXT:    ; def v[0:1]1713; GFX90A-NEXT:    ;;#ASMEND1714; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1715; GFX90A-NEXT:    v_mov_b32_e32 v2, 01716; GFX90A-NEXT:    v_bfi_b32 v1, s4, v1, v01717; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v01718; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:41719; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1720; GFX90A-NEXT:    s_waitcnt vmcnt(0)1721; GFX90A-NEXT:    s_setpc_b64 s[30:31]1722;1723; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_1_1:1724; GFX942:       ; %bb.0:1725; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1726; GFX942-NEXT:    ;;#ASMSTART1727; GFX942-NEXT:    ; def v[0:1]1728; GFX942-NEXT:    ;;#ASMEND1729; GFX942-NEXT:    s_mov_b32 s2, 0xffff1730; GFX942-NEXT:    v_mov_b32_e32 v2, 01731; GFX942-NEXT:    v_bfi_b32 v1, s2, v1, v01732; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v01733; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:41734; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1735; GFX942-NEXT:    s_waitcnt vmcnt(0)1736; GFX942-NEXT:    s_setpc_b64 s[30:31]1737  %vec0 = call <4 x i16> asm "; def $0", "=v"()1738  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1739  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>1740  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81741  ret void1742}1743 1744define void @v_shuffle_v3i16_v3i16__3_1_1(ptr addrspace(1) inreg %ptr) {1745; GFX900-LABEL: v_shuffle_v3i16_v3i16__3_1_1:1746; GFX900:       ; %bb.0:1747; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1748; GFX900-NEXT:    v_mov_b32_e32 v2, 01749; GFX900-NEXT:    ;;#ASMSTART1750; GFX900-NEXT:    ; def v[0:1]1751; GFX900-NEXT:    ;;#ASMEND1752; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41753; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1754; GFX900-NEXT:    s_waitcnt vmcnt(0)1755; GFX900-NEXT:    s_setpc_b64 s[30:31]1756;1757; GFX90A-LABEL: v_shuffle_v3i16_v3i16__3_1_1:1758; GFX90A:       ; %bb.0:1759; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1760; GFX90A-NEXT:    v_mov_b32_e32 v2, 01761; GFX90A-NEXT:    ;;#ASMSTART1762; GFX90A-NEXT:    ; def v[0:1]1763; GFX90A-NEXT:    ;;#ASMEND1764; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:41765; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1766; GFX90A-NEXT:    s_waitcnt vmcnt(0)1767; GFX90A-NEXT:    s_setpc_b64 s[30:31]1768;1769; GFX942-LABEL: v_shuffle_v3i16_v3i16__3_1_1:1770; GFX942:       ; %bb.0:1771; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1772; GFX942-NEXT:    v_mov_b32_e32 v2, 01773; GFX942-NEXT:    ;;#ASMSTART1774; GFX942-NEXT:    ; def v[0:1]1775; GFX942-NEXT:    ;;#ASMEND1776; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:41777; GFX942-NEXT:    global_store_dword v2, 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 i16> asm "; def $0", "=v"()1781  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1782  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 1, i32 1>1783  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81784  ret void1785}1786 1787define void @v_shuffle_v3i16_v3i16__4_1_1(ptr addrspace(1) inreg %ptr) {1788; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_1_1:1789; GFX900:       ; %bb.0:1790; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1791; GFX900-NEXT:    ;;#ASMSTART1792; GFX900-NEXT:    ; def v[0:1]1793; GFX900-NEXT:    ;;#ASMEND1794; GFX900-NEXT:    ;;#ASMSTART1795; GFX900-NEXT:    ; def v[1:2]1796; GFX900-NEXT:    ;;#ASMEND1797; GFX900-NEXT:    s_mov_b32 s4, 0x70603021798; GFX900-NEXT:    v_mov_b32_e32 v3, 01799; GFX900-NEXT:    v_perm_b32 v1, v0, v1, s41800; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v01801; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1802; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41803; GFX900-NEXT:    s_waitcnt vmcnt(0)1804; GFX900-NEXT:    s_setpc_b64 s[30:31]1805;1806; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_1_1:1807; GFX90A:       ; %bb.0:1808; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1809; GFX90A-NEXT:    ;;#ASMSTART1810; GFX90A-NEXT:    ; def v[0:1]1811; GFX90A-NEXT:    ;;#ASMEND1812; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021813; GFX90A-NEXT:    v_mov_b32_e32 v4, 01814; GFX90A-NEXT:    ;;#ASMSTART1815; GFX90A-NEXT:    ; def v[2:3]1816; GFX90A-NEXT:    ;;#ASMEND1817; GFX90A-NEXT:    v_perm_b32 v1, v0, v2, s41818; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v01819; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1820; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41821; GFX90A-NEXT:    s_waitcnt vmcnt(0)1822; GFX90A-NEXT:    s_setpc_b64 s[30:31]1823;1824; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_1_1:1825; GFX942:       ; %bb.0:1826; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1827; GFX942-NEXT:    ;;#ASMSTART1828; GFX942-NEXT:    ; def v[0:1]1829; GFX942-NEXT:    ;;#ASMEND1830; GFX942-NEXT:    s_mov_b32 s2, 0x70603021831; GFX942-NEXT:    v_mov_b32_e32 v4, 01832; GFX942-NEXT:    ;;#ASMSTART1833; GFX942-NEXT:    ; def v[2:3]1834; GFX942-NEXT:    ;;#ASMEND1835; GFX942-NEXT:    s_nop 01836; GFX942-NEXT:    v_perm_b32 v1, v0, v2, s21837; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v01838; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1839; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41840; GFX942-NEXT:    s_waitcnt vmcnt(0)1841; GFX942-NEXT:    s_setpc_b64 s[30:31]1842  %vec0 = call <4 x i16> asm "; def $0", "=v"()1843  %vec1 = call <4 x i16> asm "; def $0", "=v"()1844  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1845  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1846  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 1, i32 1>1847  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81848  ret void1849}1850 1851define void @v_shuffle_v3i16_v3i16__5_1_1(ptr addrspace(1) inreg %ptr) {1852; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_1:1853; GFX900:       ; %bb.0:1854; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1855; GFX900-NEXT:    ;;#ASMSTART1856; GFX900-NEXT:    ; def v[0:1]1857; GFX900-NEXT:    ;;#ASMEND1858; GFX900-NEXT:    ;;#ASMSTART1859; GFX900-NEXT:    ; def v[1:2]1860; GFX900-NEXT:    ;;#ASMEND1861; GFX900-NEXT:    s_mov_b32 s4, 0xffff1862; GFX900-NEXT:    v_mov_b32_e32 v3, 01863; GFX900-NEXT:    v_bfi_b32 v1, s4, v2, v01864; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v01865; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:41866; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1867; GFX900-NEXT:    s_waitcnt vmcnt(0)1868; GFX900-NEXT:    s_setpc_b64 s[30:31]1869;1870; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_1:1871; GFX90A:       ; %bb.0:1872; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1873; GFX90A-NEXT:    ;;#ASMSTART1874; GFX90A-NEXT:    ; def v[0:1]1875; GFX90A-NEXT:    ;;#ASMEND1876; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1877; GFX90A-NEXT:    v_mov_b32_e32 v4, 01878; GFX90A-NEXT:    ;;#ASMSTART1879; GFX90A-NEXT:    ; def v[2:3]1880; GFX90A-NEXT:    ;;#ASMEND1881; GFX90A-NEXT:    v_bfi_b32 v1, s4, v3, v01882; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v01883; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:41884; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]1885; GFX90A-NEXT:    s_waitcnt vmcnt(0)1886; GFX90A-NEXT:    s_setpc_b64 s[30:31]1887;1888; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_1:1889; GFX942:       ; %bb.0:1890; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1891; GFX942-NEXT:    ;;#ASMSTART1892; GFX942-NEXT:    ; def v[0:1]1893; GFX942-NEXT:    ;;#ASMEND1894; GFX942-NEXT:    s_mov_b32 s2, 0xffff1895; GFX942-NEXT:    v_mov_b32_e32 v4, 01896; GFX942-NEXT:    ;;#ASMSTART1897; GFX942-NEXT:    ; def v[2:3]1898; GFX942-NEXT:    ;;#ASMEND1899; GFX942-NEXT:    s_nop 01900; GFX942-NEXT:    v_bfi_b32 v1, s2, v3, v01901; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v01902; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:41903; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]1904; GFX942-NEXT:    s_waitcnt vmcnt(0)1905; GFX942-NEXT:    s_setpc_b64 s[30:31]1906  %vec0 = call <4 x i16> asm "; def $0", "=v"()1907  %vec1 = call <4 x i16> asm "; def $0", "=v"()1908  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1909  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1910  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 1>1911  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81912  ret void1913}1914 1915define void @v_shuffle_v3i16_v3i16__5_u_1(ptr addrspace(1) inreg %ptr) {1916; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_1:1917; GFX900:       ; %bb.0:1918; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1919; GFX900-NEXT:    v_mov_b32_e32 v3, 01920; GFX900-NEXT:    ;;#ASMSTART1921; GFX900-NEXT:    ; def v[0:1]1922; GFX900-NEXT:    ;;#ASMEND1923; GFX900-NEXT:    ;;#ASMSTART1924; GFX900-NEXT:    ; def v[1:2]1925; GFX900-NEXT:    ;;#ASMEND1926; GFX900-NEXT:    global_store_short_d16_hi v3, v0, s[16:17] offset:41927; GFX900-NEXT:    global_store_dword v3, v2, s[16:17]1928; GFX900-NEXT:    s_waitcnt vmcnt(0)1929; GFX900-NEXT:    s_setpc_b64 s[30:31]1930;1931; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_1:1932; GFX90A:       ; %bb.0:1933; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1934; GFX90A-NEXT:    v_mov_b32_e32 v4, 01935; GFX90A-NEXT:    ;;#ASMSTART1936; GFX90A-NEXT:    ; def v[0:1]1937; GFX90A-NEXT:    ;;#ASMEND1938; GFX90A-NEXT:    ;;#ASMSTART1939; GFX90A-NEXT:    ; def v[2:3]1940; GFX90A-NEXT:    ;;#ASMEND1941; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:41942; GFX90A-NEXT:    global_store_dword v4, v3, s[16:17]1943; GFX90A-NEXT:    s_waitcnt vmcnt(0)1944; GFX90A-NEXT:    s_setpc_b64 s[30:31]1945;1946; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_1:1947; GFX942:       ; %bb.0:1948; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1949; GFX942-NEXT:    v_mov_b32_e32 v4, 01950; GFX942-NEXT:    ;;#ASMSTART1951; GFX942-NEXT:    ; def v[0:1]1952; GFX942-NEXT:    ;;#ASMEND1953; GFX942-NEXT:    ;;#ASMSTART1954; GFX942-NEXT:    ; def v[2:3]1955; GFX942-NEXT:    ;;#ASMEND1956; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:41957; GFX942-NEXT:    global_store_dword v4, v3, s[0:1]1958; GFX942-NEXT:    s_waitcnt vmcnt(0)1959; GFX942-NEXT:    s_setpc_b64 s[30:31]1960  %vec0 = call <4 x i16> asm "; def $0", "=v"()1961  %vec1 = call <4 x i16> asm "; def $0", "=v"()1962  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1963  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1964  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 1>1965  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81966  ret void1967}1968 1969define void @v_shuffle_v3i16_v3i16__5_0_1(ptr addrspace(1) inreg %ptr) {1970; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_1:1971; GFX900:       ; %bb.0:1972; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1973; GFX900-NEXT:    ;;#ASMSTART1974; GFX900-NEXT:    ; def v[0:1]1975; GFX900-NEXT:    ;;#ASMEND1976; GFX900-NEXT:    v_mov_b32_e32 v3, 01977; GFX900-NEXT:    ;;#ASMSTART1978; GFX900-NEXT:    ; def v[1:2]1979; GFX900-NEXT:    ;;#ASMEND1980; GFX900-NEXT:    s_mov_b32 s4, 0x50401001981; GFX900-NEXT:    v_perm_b32 v1, v0, v2, s41982; GFX900-NEXT:    global_store_short_d16_hi v3, v0, s[16:17] offset:41983; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]1984; GFX900-NEXT:    s_waitcnt vmcnt(0)1985; GFX900-NEXT:    s_setpc_b64 s[30:31]1986;1987; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_1:1988; GFX90A:       ; %bb.0:1989; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1990; GFX90A-NEXT:    v_mov_b32_e32 v4, 01991; GFX90A-NEXT:    ;;#ASMSTART1992; GFX90A-NEXT:    ; def v[0:1]1993; GFX90A-NEXT:    ;;#ASMEND1994; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001995; GFX90A-NEXT:    ;;#ASMSTART1996; GFX90A-NEXT:    ; def v[2:3]1997; GFX90A-NEXT:    ;;#ASMEND1998; GFX90A-NEXT:    v_perm_b32 v1, v0, v3, s41999; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:42000; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]2001; GFX90A-NEXT:    s_waitcnt vmcnt(0)2002; GFX90A-NEXT:    s_setpc_b64 s[30:31]2003;2004; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_1:2005; GFX942:       ; %bb.0:2006; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2007; GFX942-NEXT:    v_mov_b32_e32 v4, 02008; GFX942-NEXT:    ;;#ASMSTART2009; GFX942-NEXT:    ; def v[0:1]2010; GFX942-NEXT:    ;;#ASMEND2011; GFX942-NEXT:    s_mov_b32 s2, 0x50401002012; GFX942-NEXT:    ;;#ASMSTART2013; GFX942-NEXT:    ; def v[2:3]2014; GFX942-NEXT:    ;;#ASMEND2015; GFX942-NEXT:    s_nop 02016; GFX942-NEXT:    v_perm_b32 v1, v0, v3, s22017; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:42018; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]2019; GFX942-NEXT:    s_waitcnt vmcnt(0)2020; GFX942-NEXT:    s_setpc_b64 s[30:31]2021  %vec0 = call <4 x i16> asm "; def $0", "=v"()2022  %vec1 = call <4 x i16> asm "; def $0", "=v"()2023  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2024  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2025  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 1>2026  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82027  ret void2028}2029 2030define void @v_shuffle_v3i16_v3i16__5_2_1(ptr addrspace(1) inreg %ptr) {2031; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_1:2032; GFX900:       ; %bb.0:2033; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2034; GFX900-NEXT:    v_mov_b32_e32 v4, 02035; GFX900-NEXT:    ;;#ASMSTART2036; GFX900-NEXT:    ; def v[0:1]2037; GFX900-NEXT:    ;;#ASMEND2038; GFX900-NEXT:    s_mov_b32 s4, 0x50401002039; GFX900-NEXT:    ;;#ASMSTART2040; GFX900-NEXT:    ; def v[2:3]2041; GFX900-NEXT:    ;;#ASMEND2042; GFX900-NEXT:    v_perm_b32 v1, v1, v3, s42043; GFX900-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:42044; GFX900-NEXT:    global_store_dword v4, v1, s[16:17]2045; GFX900-NEXT:    s_waitcnt vmcnt(0)2046; GFX900-NEXT:    s_setpc_b64 s[30:31]2047;2048; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_1:2049; GFX90A:       ; %bb.0:2050; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2051; GFX90A-NEXT:    v_mov_b32_e32 v4, 02052; GFX90A-NEXT:    ;;#ASMSTART2053; GFX90A-NEXT:    ; def v[0:1]2054; GFX90A-NEXT:    ;;#ASMEND2055; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002056; GFX90A-NEXT:    ;;#ASMSTART2057; GFX90A-NEXT:    ; def v[2:3]2058; GFX90A-NEXT:    ;;#ASMEND2059; GFX90A-NEXT:    v_perm_b32 v1, v1, v3, s42060; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:42061; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]2062; GFX90A-NEXT:    s_waitcnt vmcnt(0)2063; GFX90A-NEXT:    s_setpc_b64 s[30:31]2064;2065; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_1:2066; GFX942:       ; %bb.0:2067; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2068; GFX942-NEXT:    v_mov_b32_e32 v4, 02069; GFX942-NEXT:    ;;#ASMSTART2070; GFX942-NEXT:    ; def v[0:1]2071; GFX942-NEXT:    ;;#ASMEND2072; GFX942-NEXT:    s_mov_b32 s2, 0x50401002073; GFX942-NEXT:    ;;#ASMSTART2074; GFX942-NEXT:    ; def v[2:3]2075; GFX942-NEXT:    ;;#ASMEND2076; GFX942-NEXT:    s_nop 02077; GFX942-NEXT:    v_perm_b32 v1, v1, v3, s22078; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:42079; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]2080; GFX942-NEXT:    s_waitcnt vmcnt(0)2081; GFX942-NEXT:    s_setpc_b64 s[30:31]2082  %vec0 = call <4 x i16> asm "; def $0", "=v"()2083  %vec1 = call <4 x i16> asm "; def $0", "=v"()2084  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2085  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2086  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 1>2087  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82088  ret void2089}2090 2091define void @v_shuffle_v3i16_v3i16__5_3_1(ptr addrspace(1) inreg %ptr) {2092; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_1:2093; GFX900:       ; %bb.0:2094; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2095; GFX900-NEXT:    ;;#ASMSTART2096; GFX900-NEXT:    ; def v[0:1]2097; GFX900-NEXT:    ;;#ASMEND2098; GFX900-NEXT:    v_mov_b32_e32 v3, 02099; GFX900-NEXT:    ;;#ASMSTART2100; GFX900-NEXT:    ; def v[1:2]2101; GFX900-NEXT:    ;;#ASMEND2102; GFX900-NEXT:    s_mov_b32 s4, 0x50401002103; GFX900-NEXT:    v_perm_b32 v1, v1, v2, s42104; GFX900-NEXT:    global_store_short_d16_hi v3, v0, s[16:17] offset:42105; GFX900-NEXT:    global_store_dword v3, v1, 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_v3i16_v3i16__5_3_1:2110; GFX90A:       ; %bb.0:2111; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2112; GFX90A-NEXT:    v_mov_b32_e32 v4, 02113; GFX90A-NEXT:    ;;#ASMSTART2114; GFX90A-NEXT:    ; def v[0:1]2115; GFX90A-NEXT:    ;;#ASMEND2116; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002117; GFX90A-NEXT:    ;;#ASMSTART2118; GFX90A-NEXT:    ; def v[2:3]2119; GFX90A-NEXT:    ;;#ASMEND2120; GFX90A-NEXT:    v_perm_b32 v1, v2, v3, s42121; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:42122; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]2123; GFX90A-NEXT:    s_waitcnt vmcnt(0)2124; GFX90A-NEXT:    s_setpc_b64 s[30:31]2125;2126; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_1:2127; GFX942:       ; %bb.0:2128; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2129; GFX942-NEXT:    v_mov_b32_e32 v4, 02130; GFX942-NEXT:    ;;#ASMSTART2131; GFX942-NEXT:    ; def v[0:1]2132; GFX942-NEXT:    ;;#ASMEND2133; GFX942-NEXT:    s_mov_b32 s2, 0x50401002134; GFX942-NEXT:    ;;#ASMSTART2135; GFX942-NEXT:    ; def v[2:3]2136; GFX942-NEXT:    ;;#ASMEND2137; GFX942-NEXT:    s_nop 02138; GFX942-NEXT:    v_perm_b32 v1, v2, v3, s22139; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:42140; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]2141; GFX942-NEXT:    s_waitcnt vmcnt(0)2142; GFX942-NEXT:    s_setpc_b64 s[30:31]2143  %vec0 = call <4 x i16> asm "; def $0", "=v"()2144  %vec1 = call <4 x i16> asm "; def $0", "=v"()2145  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2146  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2147  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 1>2148  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82149  ret void2150}2151 2152define void @v_shuffle_v3i16_v3i16__5_4_1(ptr addrspace(1) inreg %ptr) {2153; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_1:2154; GFX900:       ; %bb.0:2155; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2156; GFX900-NEXT:    ;;#ASMSTART2157; GFX900-NEXT:    ; def v[0:1]2158; GFX900-NEXT:    ;;#ASMEND2159; GFX900-NEXT:    v_mov_b32_e32 v3, 02160; GFX900-NEXT:    ;;#ASMSTART2161; GFX900-NEXT:    ; def v[1:2]2162; GFX900-NEXT:    ;;#ASMEND2163; GFX900-NEXT:    s_mov_b32 s4, 0xffff2164; GFX900-NEXT:    v_bfi_b32 v1, s4, v2, v12165; GFX900-NEXT:    global_store_short_d16_hi v3, v0, s[16:17] offset:42166; GFX900-NEXT:    global_store_dword v3, v1, s[16:17]2167; GFX900-NEXT:    s_waitcnt vmcnt(0)2168; GFX900-NEXT:    s_setpc_b64 s[30:31]2169;2170; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_1:2171; GFX90A:       ; %bb.0:2172; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2173; GFX90A-NEXT:    v_mov_b32_e32 v4, 02174; GFX90A-NEXT:    ;;#ASMSTART2175; GFX90A-NEXT:    ; def v[0:1]2176; GFX90A-NEXT:    ;;#ASMEND2177; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2178; GFX90A-NEXT:    ;;#ASMSTART2179; GFX90A-NEXT:    ; def v[2:3]2180; GFX90A-NEXT:    ;;#ASMEND2181; GFX90A-NEXT:    v_bfi_b32 v1, s4, v3, v22182; GFX90A-NEXT:    global_store_short_d16_hi v4, v0, s[16:17] offset:42183; GFX90A-NEXT:    global_store_dword v4, v1, s[16:17]2184; GFX90A-NEXT:    s_waitcnt vmcnt(0)2185; GFX90A-NEXT:    s_setpc_b64 s[30:31]2186;2187; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_1:2188; GFX942:       ; %bb.0:2189; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX942-NEXT:    v_mov_b32_e32 v4, 02191; GFX942-NEXT:    ;;#ASMSTART2192; GFX942-NEXT:    ; def v[0:1]2193; GFX942-NEXT:    ;;#ASMEND2194; GFX942-NEXT:    s_mov_b32 s2, 0xffff2195; GFX942-NEXT:    ;;#ASMSTART2196; GFX942-NEXT:    ; def v[2:3]2197; GFX942-NEXT:    ;;#ASMEND2198; GFX942-NEXT:    s_nop 02199; GFX942-NEXT:    v_bfi_b32 v1, s2, v3, v22200; GFX942-NEXT:    global_store_short_d16_hi v4, v0, s[0:1] offset:42201; GFX942-NEXT:    global_store_dword v4, v1, s[0:1]2202; GFX942-NEXT:    s_waitcnt vmcnt(0)2203; GFX942-NEXT:    s_setpc_b64 s[30:31]2204  %vec0 = call <4 x i16> asm "; def $0", "=v"()2205  %vec1 = call <4 x i16> asm "; def $0", "=v"()2206  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2207  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2208  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 1>2209  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82210  ret void2211}2212 2213define void @v_shuffle_v3i16_v3i16__u_2_2(ptr addrspace(1) inreg %ptr) {2214; GFX900-LABEL: v_shuffle_v3i16_v3i16__u_2_2:2215; GFX900:       ; %bb.0:2216; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2217; GFX900-NEXT:    v_mov_b32_e32 v2, 02218; GFX900-NEXT:    ;;#ASMSTART2219; GFX900-NEXT:    ; def v[0:1]2220; GFX900-NEXT:    ;;#ASMEND2221; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v12222; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42223; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2224; GFX900-NEXT:    s_waitcnt vmcnt(0)2225; GFX900-NEXT:    s_setpc_b64 s[30:31]2226;2227; GFX90A-LABEL: v_shuffle_v3i16_v3i16__u_2_2:2228; GFX90A:       ; %bb.0:2229; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2230; GFX90A-NEXT:    v_mov_b32_e32 v2, 02231; GFX90A-NEXT:    ;;#ASMSTART2232; GFX90A-NEXT:    ; def v[0:1]2233; GFX90A-NEXT:    ;;#ASMEND2234; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v12235; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42236; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2237; GFX90A-NEXT:    s_waitcnt vmcnt(0)2238; GFX90A-NEXT:    s_setpc_b64 s[30:31]2239;2240; GFX942-LABEL: v_shuffle_v3i16_v3i16__u_2_2:2241; GFX942:       ; %bb.0:2242; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2243; GFX942-NEXT:    v_mov_b32_e32 v2, 02244; GFX942-NEXT:    ;;#ASMSTART2245; GFX942-NEXT:    ; def v[0:1]2246; GFX942-NEXT:    ;;#ASMEND2247; GFX942-NEXT:    s_nop 02248; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v12249; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42250; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2251; GFX942-NEXT:    s_waitcnt vmcnt(0)2252; GFX942-NEXT:    s_setpc_b64 s[30:31]2253  %vec0 = call <4 x i16> asm "; def $0", "=v"()2254  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2255  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>2256  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82257  ret void2258}2259 2260define void @v_shuffle_v3i16_v3i16__0_2_2(ptr addrspace(1) inreg %ptr) {2261; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_2_2:2262; GFX900:       ; %bb.0:2263; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2264; GFX900-NEXT:    v_mov_b32_e32 v2, 02265; GFX900-NEXT:    ;;#ASMSTART2266; GFX900-NEXT:    ; def v[0:1]2267; GFX900-NEXT:    ;;#ASMEND2268; GFX900-NEXT:    s_mov_b32 s4, 0x50401002269; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s42270; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42271; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2272; GFX900-NEXT:    s_waitcnt vmcnt(0)2273; GFX900-NEXT:    s_setpc_b64 s[30:31]2274;2275; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_2_2:2276; GFX90A:       ; %bb.0:2277; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2278; GFX90A-NEXT:    v_mov_b32_e32 v2, 02279; GFX90A-NEXT:    ;;#ASMSTART2280; GFX90A-NEXT:    ; def v[0:1]2281; GFX90A-NEXT:    ;;#ASMEND2282; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002283; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s42284; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42285; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2286; GFX90A-NEXT:    s_waitcnt vmcnt(0)2287; GFX90A-NEXT:    s_setpc_b64 s[30:31]2288;2289; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_2_2:2290; GFX942:       ; %bb.0:2291; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2292; GFX942-NEXT:    v_mov_b32_e32 v2, 02293; GFX942-NEXT:    ;;#ASMSTART2294; GFX942-NEXT:    ; def v[0:1]2295; GFX942-NEXT:    ;;#ASMEND2296; GFX942-NEXT:    s_mov_b32 s2, 0x50401002297; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s22298; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42299; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2300; GFX942-NEXT:    s_waitcnt vmcnt(0)2301; GFX942-NEXT:    s_setpc_b64 s[30:31]2302  %vec0 = call <4 x i16> asm "; def $0", "=v"()2303  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2304  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>2305  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82306  ret void2307}2308 2309define void @v_shuffle_v3i16_v3i16__1_2_2(ptr addrspace(1) inreg %ptr) {2310; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_2_2:2311; GFX900:       ; %bb.0:2312; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2313; GFX900-NEXT:    v_mov_b32_e32 v2, 02314; GFX900-NEXT:    ;;#ASMSTART2315; GFX900-NEXT:    ; def v[0:1]2316; GFX900-NEXT:    ;;#ASMEND2317; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 162318; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42319; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2320; GFX900-NEXT:    s_waitcnt vmcnt(0)2321; GFX900-NEXT:    s_setpc_b64 s[30:31]2322;2323; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_2_2:2324; GFX90A:       ; %bb.0:2325; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2326; GFX90A-NEXT:    v_mov_b32_e32 v2, 02327; GFX90A-NEXT:    ;;#ASMSTART2328; GFX90A-NEXT:    ; def v[0:1]2329; GFX90A-NEXT:    ;;#ASMEND2330; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 162331; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42332; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2333; GFX90A-NEXT:    s_waitcnt vmcnt(0)2334; GFX90A-NEXT:    s_setpc_b64 s[30:31]2335;2336; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_2_2:2337; GFX942:       ; %bb.0:2338; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2339; GFX942-NEXT:    v_mov_b32_e32 v2, 02340; GFX942-NEXT:    ;;#ASMSTART2341; GFX942-NEXT:    ; def v[0:1]2342; GFX942-NEXT:    ;;#ASMEND2343; GFX942-NEXT:    s_nop 02344; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 162345; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42346; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2347; GFX942-NEXT:    s_waitcnt vmcnt(0)2348; GFX942-NEXT:    s_setpc_b64 s[30:31]2349  %vec0 = call <4 x i16> asm "; def $0", "=v"()2350  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2351  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>2352  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82353  ret void2354}2355 2356define void @v_shuffle_v3i16_v3i16__2_2_2(ptr addrspace(1) inreg %ptr) {2357; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_2_2:2358; GFX900:       ; %bb.0:2359; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2360; GFX900-NEXT:    v_mov_b32_e32 v2, 02361; GFX900-NEXT:    ;;#ASMSTART2362; GFX900-NEXT:    ; def v[0:1]2363; GFX900-NEXT:    ;;#ASMEND2364; GFX900-NEXT:    s_mov_b32 s4, 0x50401002365; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s42366; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42367; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2368; GFX900-NEXT:    s_waitcnt vmcnt(0)2369; GFX900-NEXT:    s_setpc_b64 s[30:31]2370;2371; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_2_2:2372; GFX90A:       ; %bb.0:2373; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2374; GFX90A-NEXT:    v_mov_b32_e32 v2, 02375; GFX90A-NEXT:    ;;#ASMSTART2376; GFX90A-NEXT:    ; def v[0:1]2377; GFX90A-NEXT:    ;;#ASMEND2378; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002379; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s42380; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42381; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2382; GFX90A-NEXT:    s_waitcnt vmcnt(0)2383; GFX90A-NEXT:    s_setpc_b64 s[30:31]2384;2385; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_2_2:2386; GFX942:       ; %bb.0:2387; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GFX942-NEXT:    v_mov_b32_e32 v2, 02389; GFX942-NEXT:    ;;#ASMSTART2390; GFX942-NEXT:    ; def v[0:1]2391; GFX942-NEXT:    ;;#ASMEND2392; GFX942-NEXT:    s_mov_b32 s2, 0x50401002393; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s22394; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42395; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2396; GFX942-NEXT:    s_waitcnt vmcnt(0)2397; GFX942-NEXT:    s_setpc_b64 s[30:31]2398  %vec0 = call <4 x i16> asm "; def $0", "=v"()2399  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2400  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>2401  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82402  ret void2403}2404 2405define void @v_shuffle_v3i16_v3i16__3_2_2(ptr addrspace(1) inreg %ptr) {2406; GFX900-LABEL: v_shuffle_v3i16_v3i16__3_2_2:2407; GFX900:       ; %bb.0:2408; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2409; GFX900-NEXT:    v_mov_b32_e32 v2, 02410; GFX900-NEXT:    ;;#ASMSTART2411; GFX900-NEXT:    ; def v[0:1]2412; GFX900-NEXT:    ;;#ASMEND2413; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v12414; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42415; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2416; GFX900-NEXT:    s_waitcnt vmcnt(0)2417; GFX900-NEXT:    s_setpc_b64 s[30:31]2418;2419; GFX90A-LABEL: v_shuffle_v3i16_v3i16__3_2_2:2420; GFX90A:       ; %bb.0:2421; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2422; GFX90A-NEXT:    v_mov_b32_e32 v2, 02423; GFX90A-NEXT:    ;;#ASMSTART2424; GFX90A-NEXT:    ; def v[0:1]2425; GFX90A-NEXT:    ;;#ASMEND2426; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v12427; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42428; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2429; GFX90A-NEXT:    s_waitcnt vmcnt(0)2430; GFX90A-NEXT:    s_setpc_b64 s[30:31]2431;2432; GFX942-LABEL: v_shuffle_v3i16_v3i16__3_2_2:2433; GFX942:       ; %bb.0:2434; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2435; GFX942-NEXT:    v_mov_b32_e32 v2, 02436; GFX942-NEXT:    ;;#ASMSTART2437; GFX942-NEXT:    ; def v[0:1]2438; GFX942-NEXT:    ;;#ASMEND2439; GFX942-NEXT:    s_nop 02440; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v12441; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42442; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2443; GFX942-NEXT:    s_waitcnt vmcnt(0)2444; GFX942-NEXT:    s_setpc_b64 s[30:31]2445  %vec0 = call <4 x i16> asm "; def $0", "=v"()2446  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2447  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 2, i32 2>2448  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82449  ret void2450}2451 2452define void @v_shuffle_v3i16_v3i16__4_2_2(ptr addrspace(1) inreg %ptr) {2453; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_2_2:2454; GFX900:       ; %bb.0:2455; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2456; GFX900-NEXT:    v_mov_b32_e32 v4, 02457; GFX900-NEXT:    ;;#ASMSTART2458; GFX900-NEXT:    ; def v[0:1]2459; GFX900-NEXT:    ;;#ASMEND2460; GFX900-NEXT:    ;;#ASMSTART2461; GFX900-NEXT:    ; def v[2:3]2462; GFX900-NEXT:    ;;#ASMEND2463; GFX900-NEXT:    v_alignbit_b32 v0, v1, v2, 162464; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42465; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2466; GFX900-NEXT:    s_waitcnt vmcnt(0)2467; GFX900-NEXT:    s_setpc_b64 s[30:31]2468;2469; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_2_2:2470; GFX90A:       ; %bb.0:2471; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2472; GFX90A-NEXT:    v_mov_b32_e32 v4, 02473; GFX90A-NEXT:    ;;#ASMSTART2474; GFX90A-NEXT:    ; def v[0:1]2475; GFX90A-NEXT:    ;;#ASMEND2476; GFX90A-NEXT:    ;;#ASMSTART2477; GFX90A-NEXT:    ; def v[2:3]2478; GFX90A-NEXT:    ;;#ASMEND2479; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v2, 162480; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42481; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2482; GFX90A-NEXT:    s_waitcnt vmcnt(0)2483; GFX90A-NEXT:    s_setpc_b64 s[30:31]2484;2485; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_2_2:2486; GFX942:       ; %bb.0:2487; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2488; GFX942-NEXT:    v_mov_b32_e32 v4, 02489; GFX942-NEXT:    ;;#ASMSTART2490; GFX942-NEXT:    ; def v[0:1]2491; GFX942-NEXT:    ;;#ASMEND2492; GFX942-NEXT:    ;;#ASMSTART2493; GFX942-NEXT:    ; def v[2:3]2494; GFX942-NEXT:    ;;#ASMEND2495; GFX942-NEXT:    s_nop 02496; GFX942-NEXT:    v_alignbit_b32 v0, v1, v2, 162497; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42498; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2499; GFX942-NEXT:    s_waitcnt vmcnt(0)2500; GFX942-NEXT:    s_setpc_b64 s[30:31]2501  %vec0 = call <4 x i16> asm "; def $0", "=v"()2502  %vec1 = call <4 x i16> asm "; def $0", "=v"()2503  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2504  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2505  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 2, i32 2>2506  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82507  ret void2508}2509 2510define void @v_shuffle_v3i16_v3i16__5_2_2(ptr addrspace(1) inreg %ptr) {2511; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_2:2512; GFX900:       ; %bb.0:2513; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2514; GFX900-NEXT:    v_mov_b32_e32 v4, 02515; GFX900-NEXT:    ;;#ASMSTART2516; GFX900-NEXT:    ; def v[0:1]2517; GFX900-NEXT:    ;;#ASMEND2518; GFX900-NEXT:    s_mov_b32 s4, 0x50401002519; GFX900-NEXT:    ;;#ASMSTART2520; GFX900-NEXT:    ; def v[2:3]2521; GFX900-NEXT:    ;;#ASMEND2522; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s42523; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42524; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2525; GFX900-NEXT:    s_waitcnt vmcnt(0)2526; GFX900-NEXT:    s_setpc_b64 s[30:31]2527;2528; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_2:2529; GFX90A:       ; %bb.0:2530; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2531; GFX90A-NEXT:    v_mov_b32_e32 v4, 02532; GFX90A-NEXT:    ;;#ASMSTART2533; GFX90A-NEXT:    ; def v[0:1]2534; GFX90A-NEXT:    ;;#ASMEND2535; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002536; GFX90A-NEXT:    ;;#ASMSTART2537; GFX90A-NEXT:    ; def v[2:3]2538; GFX90A-NEXT:    ;;#ASMEND2539; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s42540; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42541; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2542; GFX90A-NEXT:    s_waitcnt vmcnt(0)2543; GFX90A-NEXT:    s_setpc_b64 s[30:31]2544;2545; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_2:2546; GFX942:       ; %bb.0:2547; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2548; GFX942-NEXT:    v_mov_b32_e32 v4, 02549; GFX942-NEXT:    ;;#ASMSTART2550; GFX942-NEXT:    ; def v[0:1]2551; GFX942-NEXT:    ;;#ASMEND2552; GFX942-NEXT:    s_mov_b32 s2, 0x50401002553; GFX942-NEXT:    ;;#ASMSTART2554; GFX942-NEXT:    ; def v[2:3]2555; GFX942-NEXT:    ;;#ASMEND2556; GFX942-NEXT:    s_nop 02557; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s22558; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42559; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2560; GFX942-NEXT:    s_waitcnt vmcnt(0)2561; GFX942-NEXT:    s_setpc_b64 s[30:31]2562  %vec0 = call <4 x i16> asm "; def $0", "=v"()2563  %vec1 = call <4 x i16> asm "; def $0", "=v"()2564  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2565  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2566  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 2>2567  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82568  ret void2569}2570 2571define void @v_shuffle_v3i16_v3i16__5_u_2(ptr addrspace(1) inreg %ptr) {2572; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_2:2573; GFX900:       ; %bb.0:2574; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2575; GFX900-NEXT:    v_mov_b32_e32 v4, 02576; GFX900-NEXT:    ;;#ASMSTART2577; GFX900-NEXT:    ; def v[0:1]2578; GFX900-NEXT:    ;;#ASMEND2579; GFX900-NEXT:    ;;#ASMSTART2580; GFX900-NEXT:    ; def v[2:3]2581; GFX900-NEXT:    ;;#ASMEND2582; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42583; GFX900-NEXT:    global_store_dword v4, v3, s[16:17]2584; GFX900-NEXT:    s_waitcnt vmcnt(0)2585; GFX900-NEXT:    s_setpc_b64 s[30:31]2586;2587; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_2:2588; GFX90A:       ; %bb.0:2589; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2590; GFX90A-NEXT:    v_mov_b32_e32 v4, 02591; GFX90A-NEXT:    ;;#ASMSTART2592; GFX90A-NEXT:    ; def v[0:1]2593; GFX90A-NEXT:    ;;#ASMEND2594; GFX90A-NEXT:    ;;#ASMSTART2595; GFX90A-NEXT:    ; def v[2:3]2596; GFX90A-NEXT:    ;;#ASMEND2597; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42598; GFX90A-NEXT:    global_store_dword v4, v3, s[16:17]2599; GFX90A-NEXT:    s_waitcnt vmcnt(0)2600; GFX90A-NEXT:    s_setpc_b64 s[30:31]2601;2602; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_2:2603; GFX942:       ; %bb.0:2604; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2605; GFX942-NEXT:    v_mov_b32_e32 v4, 02606; GFX942-NEXT:    ;;#ASMSTART2607; GFX942-NEXT:    ; def v[0:1]2608; GFX942-NEXT:    ;;#ASMEND2609; GFX942-NEXT:    ;;#ASMSTART2610; GFX942-NEXT:    ; def v[2:3]2611; GFX942-NEXT:    ;;#ASMEND2612; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42613; GFX942-NEXT:    global_store_dword v4, v3, s[0:1]2614; GFX942-NEXT:    s_waitcnt vmcnt(0)2615; GFX942-NEXT:    s_setpc_b64 s[30:31]2616  %vec0 = call <4 x i16> asm "; def $0", "=v"()2617  %vec1 = call <4 x i16> asm "; def $0", "=v"()2618  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2619  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2620  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 2>2621  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82622  ret void2623}2624 2625define void @v_shuffle_v3i16_v3i16__5_0_2(ptr addrspace(1) inreg %ptr) {2626; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_2:2627; GFX900:       ; %bb.0:2628; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2629; GFX900-NEXT:    v_mov_b32_e32 v4, 02630; GFX900-NEXT:    ;;#ASMSTART2631; GFX900-NEXT:    ; def v[0:1]2632; GFX900-NEXT:    ;;#ASMEND2633; GFX900-NEXT:    s_mov_b32 s4, 0x50401002634; GFX900-NEXT:    ;;#ASMSTART2635; GFX900-NEXT:    ; def v[2:3]2636; GFX900-NEXT:    ;;#ASMEND2637; GFX900-NEXT:    v_perm_b32 v0, v0, v3, s42638; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42639; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2640; GFX900-NEXT:    s_waitcnt vmcnt(0)2641; GFX900-NEXT:    s_setpc_b64 s[30:31]2642;2643; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_2:2644; GFX90A:       ; %bb.0:2645; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2646; GFX90A-NEXT:    v_mov_b32_e32 v4, 02647; GFX90A-NEXT:    ;;#ASMSTART2648; GFX90A-NEXT:    ; def v[0:1]2649; GFX90A-NEXT:    ;;#ASMEND2650; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002651; GFX90A-NEXT:    ;;#ASMSTART2652; GFX90A-NEXT:    ; def v[2:3]2653; GFX90A-NEXT:    ;;#ASMEND2654; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s42655; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42656; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2657; GFX90A-NEXT:    s_waitcnt vmcnt(0)2658; GFX90A-NEXT:    s_setpc_b64 s[30:31]2659;2660; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_2:2661; GFX942:       ; %bb.0:2662; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2663; GFX942-NEXT:    v_mov_b32_e32 v4, 02664; GFX942-NEXT:    ;;#ASMSTART2665; GFX942-NEXT:    ; def v[0:1]2666; GFX942-NEXT:    ;;#ASMEND2667; GFX942-NEXT:    s_mov_b32 s2, 0x50401002668; GFX942-NEXT:    ;;#ASMSTART2669; GFX942-NEXT:    ; def v[2:3]2670; GFX942-NEXT:    ;;#ASMEND2671; GFX942-NEXT:    s_nop 02672; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s22673; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42674; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2675; GFX942-NEXT:    s_waitcnt vmcnt(0)2676; GFX942-NEXT:    s_setpc_b64 s[30:31]2677  %vec0 = call <4 x i16> asm "; def $0", "=v"()2678  %vec1 = call <4 x i16> asm "; def $0", "=v"()2679  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2680  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2681  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 2>2682  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82683  ret void2684}2685 2686define void @v_shuffle_v3i16_v3i16__5_1_2(ptr addrspace(1) inreg %ptr) {2687; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_2:2688; GFX900:       ; %bb.0:2689; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2690; GFX900-NEXT:    v_mov_b32_e32 v4, 02691; GFX900-NEXT:    ;;#ASMSTART2692; GFX900-NEXT:    ; def v[0:1]2693; GFX900-NEXT:    ;;#ASMEND2694; GFX900-NEXT:    s_mov_b32 s4, 0xffff2695; GFX900-NEXT:    ;;#ASMSTART2696; GFX900-NEXT:    ; def v[2:3]2697; GFX900-NEXT:    ;;#ASMEND2698; GFX900-NEXT:    v_bfi_b32 v0, s4, v3, v02699; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42700; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2701; GFX900-NEXT:    s_waitcnt vmcnt(0)2702; GFX900-NEXT:    s_setpc_b64 s[30:31]2703;2704; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_2:2705; GFX90A:       ; %bb.0:2706; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2707; GFX90A-NEXT:    v_mov_b32_e32 v4, 02708; GFX90A-NEXT:    ;;#ASMSTART2709; GFX90A-NEXT:    ; def v[0:1]2710; GFX90A-NEXT:    ;;#ASMEND2711; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2712; GFX90A-NEXT:    ;;#ASMSTART2713; GFX90A-NEXT:    ; def v[2:3]2714; GFX90A-NEXT:    ;;#ASMEND2715; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v02716; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42717; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2718; GFX90A-NEXT:    s_waitcnt vmcnt(0)2719; GFX90A-NEXT:    s_setpc_b64 s[30:31]2720;2721; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_2:2722; GFX942:       ; %bb.0:2723; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2724; GFX942-NEXT:    v_mov_b32_e32 v4, 02725; GFX942-NEXT:    ;;#ASMSTART2726; GFX942-NEXT:    ; def v[0:1]2727; GFX942-NEXT:    ;;#ASMEND2728; GFX942-NEXT:    s_mov_b32 s2, 0xffff2729; GFX942-NEXT:    ;;#ASMSTART2730; GFX942-NEXT:    ; def v[2:3]2731; GFX942-NEXT:    ;;#ASMEND2732; GFX942-NEXT:    s_nop 02733; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v02734; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42735; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2736; GFX942-NEXT:    s_waitcnt vmcnt(0)2737; GFX942-NEXT:    s_setpc_b64 s[30:31]2738  %vec0 = call <4 x i16> asm "; def $0", "=v"()2739  %vec1 = call <4 x i16> asm "; def $0", "=v"()2740  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2741  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2742  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 2>2743  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82744  ret void2745}2746 2747define void @v_shuffle_v3i16_v3i16__5_3_2(ptr addrspace(1) inreg %ptr) {2748; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_2:2749; GFX900:       ; %bb.0:2750; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2751; GFX900-NEXT:    v_mov_b32_e32 v4, 02752; GFX900-NEXT:    ;;#ASMSTART2753; GFX900-NEXT:    ; def v[0:1]2754; GFX900-NEXT:    ;;#ASMEND2755; GFX900-NEXT:    s_mov_b32 s4, 0x50401002756; GFX900-NEXT:    ;;#ASMSTART2757; GFX900-NEXT:    ; def v[2:3]2758; GFX900-NEXT:    ;;#ASMEND2759; GFX900-NEXT:    v_perm_b32 v0, v2, v3, s42760; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42761; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2762; GFX900-NEXT:    s_waitcnt vmcnt(0)2763; GFX900-NEXT:    s_setpc_b64 s[30:31]2764;2765; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_2:2766; GFX90A:       ; %bb.0:2767; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2768; GFX90A-NEXT:    v_mov_b32_e32 v4, 02769; GFX90A-NEXT:    ;;#ASMSTART2770; GFX90A-NEXT:    ; def v[0:1]2771; GFX90A-NEXT:    ;;#ASMEND2772; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002773; GFX90A-NEXT:    ;;#ASMSTART2774; GFX90A-NEXT:    ; def v[2:3]2775; GFX90A-NEXT:    ;;#ASMEND2776; GFX90A-NEXT:    v_perm_b32 v0, v2, v3, s42777; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42778; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2779; GFX90A-NEXT:    s_waitcnt vmcnt(0)2780; GFX90A-NEXT:    s_setpc_b64 s[30:31]2781;2782; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_2:2783; GFX942:       ; %bb.0:2784; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2785; GFX942-NEXT:    v_mov_b32_e32 v4, 02786; GFX942-NEXT:    ;;#ASMSTART2787; GFX942-NEXT:    ; def v[0:1]2788; GFX942-NEXT:    ;;#ASMEND2789; GFX942-NEXT:    s_mov_b32 s2, 0x50401002790; GFX942-NEXT:    ;;#ASMSTART2791; GFX942-NEXT:    ; def v[2:3]2792; GFX942-NEXT:    ;;#ASMEND2793; GFX942-NEXT:    s_nop 02794; GFX942-NEXT:    v_perm_b32 v0, v2, v3, s22795; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42796; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2797; GFX942-NEXT:    s_waitcnt vmcnt(0)2798; GFX942-NEXT:    s_setpc_b64 s[30:31]2799  %vec0 = call <4 x i16> asm "; def $0", "=v"()2800  %vec1 = call <4 x i16> asm "; def $0", "=v"()2801  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2802  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2803  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 2>2804  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82805  ret void2806}2807 2808define void @v_shuffle_v3i16_v3i16__5_4_2(ptr addrspace(1) inreg %ptr) {2809; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_2:2810; GFX900:       ; %bb.0:2811; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2812; GFX900-NEXT:    v_mov_b32_e32 v4, 02813; GFX900-NEXT:    ;;#ASMSTART2814; GFX900-NEXT:    ; def v[0:1]2815; GFX900-NEXT:    ;;#ASMEND2816; GFX900-NEXT:    s_mov_b32 s4, 0xffff2817; GFX900-NEXT:    ;;#ASMSTART2818; GFX900-NEXT:    ; def v[2:3]2819; GFX900-NEXT:    ;;#ASMEND2820; GFX900-NEXT:    v_bfi_b32 v0, s4, v3, v22821; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:42822; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2823; GFX900-NEXT:    s_waitcnt vmcnt(0)2824; GFX900-NEXT:    s_setpc_b64 s[30:31]2825;2826; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_2:2827; GFX90A:       ; %bb.0:2828; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2829; GFX90A-NEXT:    v_mov_b32_e32 v4, 02830; GFX90A-NEXT:    ;;#ASMSTART2831; GFX90A-NEXT:    ; def v[0:1]2832; GFX90A-NEXT:    ;;#ASMEND2833; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2834; GFX90A-NEXT:    ;;#ASMSTART2835; GFX90A-NEXT:    ; def v[2:3]2836; GFX90A-NEXT:    ;;#ASMEND2837; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v22838; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:42839; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2840; GFX90A-NEXT:    s_waitcnt vmcnt(0)2841; GFX90A-NEXT:    s_setpc_b64 s[30:31]2842;2843; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_2:2844; GFX942:       ; %bb.0:2845; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2846; GFX942-NEXT:    v_mov_b32_e32 v4, 02847; GFX942-NEXT:    ;;#ASMSTART2848; GFX942-NEXT:    ; def v[0:1]2849; GFX942-NEXT:    ;;#ASMEND2850; GFX942-NEXT:    s_mov_b32 s2, 0xffff2851; GFX942-NEXT:    ;;#ASMSTART2852; GFX942-NEXT:    ; def v[2:3]2853; GFX942-NEXT:    ;;#ASMEND2854; GFX942-NEXT:    s_nop 02855; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v22856; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:42857; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2858; GFX942-NEXT:    s_waitcnt vmcnt(0)2859; GFX942-NEXT:    s_setpc_b64 s[30:31]2860  %vec0 = call <4 x i16> asm "; def $0", "=v"()2861  %vec1 = call <4 x i16> asm "; def $0", "=v"()2862  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2863  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2864  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 2>2865  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82866  ret void2867}2868 2869define void @v_shuffle_v3i16_v3i16__u_3_3(ptr addrspace(1) inreg %ptr) {2870; GFX9-LABEL: v_shuffle_v3i16_v3i16__u_3_3:2871; GFX9:       ; %bb.0:2872; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2873; GFX9-NEXT:    s_setpc_b64 s[30:31]2874  %vec0 = call <4 x i16> asm "; def $0", "=v"()2875  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2876  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 3, i32 3>2877  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82878  ret void2879}2880 2881define void @v_shuffle_v3i16_v3i16__0_3_3(ptr addrspace(1) inreg %ptr) {2882; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_3_3:2883; GFX900:       ; %bb.0:2884; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2885; GFX900-NEXT:    v_mov_b32_e32 v2, 02886; GFX900-NEXT:    ;;#ASMSTART2887; GFX900-NEXT:    ; def v[0:1]2888; GFX900-NEXT:    ;;#ASMEND2889; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:42890; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2891; GFX900-NEXT:    s_waitcnt vmcnt(0)2892; GFX900-NEXT:    s_setpc_b64 s[30:31]2893;2894; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_3_3:2895; GFX90A:       ; %bb.0:2896; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2897; GFX90A-NEXT:    v_mov_b32_e32 v2, 02898; GFX90A-NEXT:    ;;#ASMSTART2899; GFX90A-NEXT:    ; def v[0:1]2900; GFX90A-NEXT:    ;;#ASMEND2901; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:42902; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2903; GFX90A-NEXT:    s_waitcnt vmcnt(0)2904; GFX90A-NEXT:    s_setpc_b64 s[30:31]2905;2906; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_3_3:2907; GFX942:       ; %bb.0:2908; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2909; GFX942-NEXT:    v_mov_b32_e32 v2, 02910; GFX942-NEXT:    ;;#ASMSTART2911; GFX942-NEXT:    ; def v[0:1]2912; GFX942-NEXT:    ;;#ASMEND2913; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:42914; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2915; GFX942-NEXT:    s_waitcnt vmcnt(0)2916; GFX942-NEXT:    s_setpc_b64 s[30:31]2917  %vec0 = call <4 x i16> asm "; def $0", "=v"()2918  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2919  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 3, i32 3>2920  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82921  ret void2922}2923 2924define void @v_shuffle_v3i16_v3i16__1_3_3(ptr addrspace(1) inreg %ptr) {2925; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_3_3:2926; GFX900:       ; %bb.0:2927; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2928; GFX900-NEXT:    ;;#ASMSTART2929; GFX900-NEXT:    ; def v[0:1]2930; GFX900-NEXT:    ;;#ASMEND2931; GFX900-NEXT:    v_mov_b32_e32 v2, 02932; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 162933; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2934; GFX900-NEXT:    s_waitcnt vmcnt(0)2935; GFX900-NEXT:    s_setpc_b64 s[30:31]2936;2937; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_3_3:2938; GFX90A:       ; %bb.0:2939; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2940; GFX90A-NEXT:    ;;#ASMSTART2941; GFX90A-NEXT:    ; def v[0:1]2942; GFX90A-NEXT:    ;;#ASMEND2943; GFX90A-NEXT:    v_mov_b32_e32 v2, 02944; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 162945; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2946; GFX90A-NEXT:    s_waitcnt vmcnt(0)2947; GFX90A-NEXT:    s_setpc_b64 s[30:31]2948;2949; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_3_3:2950; GFX942:       ; %bb.0:2951; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2952; GFX942-NEXT:    ;;#ASMSTART2953; GFX942-NEXT:    ; def v[0:1]2954; GFX942-NEXT:    ;;#ASMEND2955; GFX942-NEXT:    v_mov_b32_e32 v2, 02956; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 162957; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2958; GFX942-NEXT:    s_waitcnt vmcnt(0)2959; GFX942-NEXT:    s_setpc_b64 s[30:31]2960  %vec0 = call <4 x i16> asm "; def $0", "=v"()2961  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2962  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 3, i32 3>2963  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82964  ret void2965}2966 2967define void @v_shuffle_v3i16_v3i16__2_3_3(ptr addrspace(1) inreg %ptr) {2968; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_3_3:2969; GFX900:       ; %bb.0:2970; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2971; GFX900-NEXT:    v_mov_b32_e32 v2, 02972; GFX900-NEXT:    ;;#ASMSTART2973; GFX900-NEXT:    ; def v[0:1]2974; GFX900-NEXT:    ;;#ASMEND2975; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]2976; GFX900-NEXT:    s_waitcnt vmcnt(0)2977; GFX900-NEXT:    s_setpc_b64 s[30:31]2978;2979; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_3_3:2980; GFX90A:       ; %bb.0:2981; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2982; GFX90A-NEXT:    v_mov_b32_e32 v2, 02983; GFX90A-NEXT:    ;;#ASMSTART2984; GFX90A-NEXT:    ; def v[0:1]2985; GFX90A-NEXT:    ;;#ASMEND2986; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]2987; GFX90A-NEXT:    s_waitcnt vmcnt(0)2988; GFX90A-NEXT:    s_setpc_b64 s[30:31]2989;2990; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_3_3:2991; GFX942:       ; %bb.0:2992; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2993; GFX942-NEXT:    v_mov_b32_e32 v2, 02994; GFX942-NEXT:    ;;#ASMSTART2995; GFX942-NEXT:    ; def v[0:1]2996; GFX942-NEXT:    ;;#ASMEND2997; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]2998; GFX942-NEXT:    s_waitcnt vmcnt(0)2999; GFX942-NEXT:    s_setpc_b64 s[30:31]3000  %vec0 = call <4 x i16> asm "; def $0", "=v"()3001  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3002  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 3, i32 3>3003  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83004  ret void3005}3006 3007define void @v_shuffle_v3i16_v3i16__3_3_3(ptr addrspace(1) inreg %ptr) {3008; GFX9-LABEL: v_shuffle_v3i16_v3i16__3_3_3:3009; GFX9:       ; %bb.0:3010; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3011; GFX9-NEXT:    s_setpc_b64 s[30:31]3012  %vec0 = call <4 x i16> asm "; def $0", "=v"()3013  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3014  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 3, i32 3>3015  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83016  ret void3017}3018 3019define void @v_shuffle_v3i16_v3i16__4_3_3(ptr addrspace(1) inreg %ptr) {3020; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_3_3:3021; GFX900:       ; %bb.0:3022; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3023; GFX900-NEXT:    v_mov_b32_e32 v2, 03024; GFX900-NEXT:    ;;#ASMSTART3025; GFX900-NEXT:    ; def v[0:1]3026; GFX900-NEXT:    ;;#ASMEND3027; GFX900-NEXT:    v_alignbit_b32 v1, v0, v0, 163028; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43029; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3030; GFX900-NEXT:    s_waitcnt vmcnt(0)3031; GFX900-NEXT:    s_setpc_b64 s[30:31]3032;3033; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_3_3:3034; GFX90A:       ; %bb.0:3035; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3036; GFX90A-NEXT:    v_mov_b32_e32 v2, 03037; GFX90A-NEXT:    ;;#ASMSTART3038; GFX90A-NEXT:    ; def v[0:1]3039; GFX90A-NEXT:    ;;#ASMEND3040; GFX90A-NEXT:    v_alignbit_b32 v1, v0, v0, 163041; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43042; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3043; GFX90A-NEXT:    s_waitcnt vmcnt(0)3044; GFX90A-NEXT:    s_setpc_b64 s[30:31]3045;3046; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_3_3:3047; GFX942:       ; %bb.0:3048; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3049; GFX942-NEXT:    v_mov_b32_e32 v2, 03050; GFX942-NEXT:    ;;#ASMSTART3051; GFX942-NEXT:    ; def v[0:1]3052; GFX942-NEXT:    ;;#ASMEND3053; GFX942-NEXT:    s_nop 03054; GFX942-NEXT:    v_alignbit_b32 v1, v0, v0, 163055; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43056; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3057; GFX942-NEXT:    s_waitcnt vmcnt(0)3058; GFX942-NEXT:    s_setpc_b64 s[30:31]3059  %vec0 = call <4 x i16> asm "; def $0", "=v"()3060  %vec1 = call <4 x i16> asm "; def $0", "=v"()3061  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3062  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3063  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 3, i32 3>3064  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83065  ret void3066}3067 3068define void @v_shuffle_v3i16_v3i16__5_3_3(ptr addrspace(1) inreg %ptr) {3069; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_3:3070; GFX900:       ; %bb.0:3071; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3072; GFX900-NEXT:    v_mov_b32_e32 v2, 03073; GFX900-NEXT:    ;;#ASMSTART3074; GFX900-NEXT:    ; def v[0:1]3075; GFX900-NEXT:    ;;#ASMEND3076; GFX900-NEXT:    s_mov_b32 s4, 0x50401003077; GFX900-NEXT:    v_perm_b32 v1, v0, v1, s43078; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43079; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3080; GFX900-NEXT:    s_waitcnt vmcnt(0)3081; GFX900-NEXT:    s_setpc_b64 s[30:31]3082;3083; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_3:3084; GFX90A:       ; %bb.0:3085; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3086; GFX90A-NEXT:    v_mov_b32_e32 v2, 03087; GFX90A-NEXT:    ;;#ASMSTART3088; GFX90A-NEXT:    ; def v[0:1]3089; GFX90A-NEXT:    ;;#ASMEND3090; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003091; GFX90A-NEXT:    v_perm_b32 v1, v0, v1, s43092; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43093; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3094; GFX90A-NEXT:    s_waitcnt vmcnt(0)3095; GFX90A-NEXT:    s_setpc_b64 s[30:31]3096;3097; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_3:3098; GFX942:       ; %bb.0:3099; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3100; GFX942-NEXT:    v_mov_b32_e32 v2, 03101; GFX942-NEXT:    ;;#ASMSTART3102; GFX942-NEXT:    ; def v[0:1]3103; GFX942-NEXT:    ;;#ASMEND3104; GFX942-NEXT:    s_mov_b32 s2, 0x50401003105; GFX942-NEXT:    v_perm_b32 v1, v0, v1, s23106; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43107; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3108; GFX942-NEXT:    s_waitcnt vmcnt(0)3109; GFX942-NEXT:    s_setpc_b64 s[30:31]3110  %vec0 = call <4 x i16> asm "; def $0", "=v"()3111  %vec1 = call <4 x i16> asm "; def $0", "=v"()3112  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3113  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3114  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 3>3115  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83116  ret void3117}3118 3119define void @v_shuffle_v3i16_v3i16__5_u_3(ptr addrspace(1) inreg %ptr) {3120; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_3:3121; GFX900:       ; %bb.0:3122; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3123; GFX900-NEXT:    v_mov_b32_e32 v2, 03124; GFX900-NEXT:    ;;#ASMSTART3125; GFX900-NEXT:    ; def v[0:1]3126; GFX900-NEXT:    ;;#ASMEND3127; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43128; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3129; GFX900-NEXT:    s_waitcnt vmcnt(0)3130; GFX900-NEXT:    s_setpc_b64 s[30:31]3131;3132; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_3:3133; GFX90A:       ; %bb.0:3134; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3135; GFX90A-NEXT:    v_mov_b32_e32 v2, 03136; GFX90A-NEXT:    ;;#ASMSTART3137; GFX90A-NEXT:    ; def v[0:1]3138; GFX90A-NEXT:    ;;#ASMEND3139; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43140; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3141; GFX90A-NEXT:    s_waitcnt vmcnt(0)3142; GFX90A-NEXT:    s_setpc_b64 s[30:31]3143;3144; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_3:3145; GFX942:       ; %bb.0:3146; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3147; GFX942-NEXT:    v_mov_b32_e32 v2, 03148; GFX942-NEXT:    ;;#ASMSTART3149; GFX942-NEXT:    ; def v[0:1]3150; GFX942-NEXT:    ;;#ASMEND3151; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43152; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3153; GFX942-NEXT:    s_waitcnt vmcnt(0)3154; GFX942-NEXT:    s_setpc_b64 s[30:31]3155  %vec0 = call <4 x i16> asm "; def $0", "=v"()3156  %vec1 = call <4 x i16> asm "; def $0", "=v"()3157  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3158  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3159  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 3>3160  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83161  ret void3162}3163 3164define void @v_shuffle_v3i16_v3i16__5_0_3(ptr addrspace(1) inreg %ptr) {3165; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_3:3166; GFX900:       ; %bb.0:3167; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3168; GFX900-NEXT:    ;;#ASMSTART3169; GFX900-NEXT:    ; def v[0:1]3170; GFX900-NEXT:    ;;#ASMEND3171; GFX900-NEXT:    v_mov_b32_e32 v3, 03172; GFX900-NEXT:    ;;#ASMSTART3173; GFX900-NEXT:    ; def v[1:2]3174; GFX900-NEXT:    ;;#ASMEND3175; GFX900-NEXT:    s_mov_b32 s4, 0x50401003176; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s43177; GFX900-NEXT:    global_store_short v3, v1, s[16:17] offset:43178; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3179; GFX900-NEXT:    s_waitcnt vmcnt(0)3180; GFX900-NEXT:    s_setpc_b64 s[30:31]3181;3182; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_3:3183; GFX90A:       ; %bb.0:3184; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3185; GFX90A-NEXT:    v_mov_b32_e32 v4, 03186; GFX90A-NEXT:    ;;#ASMSTART3187; GFX90A-NEXT:    ; def v[0:1]3188; GFX90A-NEXT:    ;;#ASMEND3189; GFX90A-NEXT:    ;;#ASMSTART3190; GFX90A-NEXT:    ; def v[2:3]3191; GFX90A-NEXT:    ;;#ASMEND3192; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003193; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s43194; GFX90A-NEXT:    global_store_short v4, v2, s[16:17] offset:43195; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3196; GFX90A-NEXT:    s_waitcnt vmcnt(0)3197; GFX90A-NEXT:    s_setpc_b64 s[30:31]3198;3199; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_3:3200; GFX942:       ; %bb.0:3201; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3202; GFX942-NEXT:    v_mov_b32_e32 v4, 03203; GFX942-NEXT:    ;;#ASMSTART3204; GFX942-NEXT:    ; def v[0:1]3205; GFX942-NEXT:    ;;#ASMEND3206; GFX942-NEXT:    ;;#ASMSTART3207; GFX942-NEXT:    ; def v[2:3]3208; GFX942-NEXT:    ;;#ASMEND3209; GFX942-NEXT:    s_mov_b32 s2, 0x50401003210; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s23211; GFX942-NEXT:    global_store_short v4, v2, s[0:1] offset:43212; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3213; GFX942-NEXT:    s_waitcnt vmcnt(0)3214; GFX942-NEXT:    s_setpc_b64 s[30:31]3215  %vec0 = call <4 x i16> asm "; def $0", "=v"()3216  %vec1 = call <4 x i16> asm "; def $0", "=v"()3217  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3218  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3219  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 3>3220  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83221  ret void3222}3223 3224define void @v_shuffle_v3i16_v3i16__5_1_3(ptr addrspace(1) inreg %ptr) {3225; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_3:3226; GFX900:       ; %bb.0:3227; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3228; GFX900-NEXT:    ;;#ASMSTART3229; GFX900-NEXT:    ; def v[0:1]3230; GFX900-NEXT:    ;;#ASMEND3231; GFX900-NEXT:    v_mov_b32_e32 v3, 03232; GFX900-NEXT:    ;;#ASMSTART3233; GFX900-NEXT:    ; def v[1:2]3234; GFX900-NEXT:    ;;#ASMEND3235; GFX900-NEXT:    s_mov_b32 s4, 0xffff3236; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v03237; GFX900-NEXT:    global_store_short v3, v1, s[16:17] offset:43238; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3239; GFX900-NEXT:    s_waitcnt vmcnt(0)3240; GFX900-NEXT:    s_setpc_b64 s[30:31]3241;3242; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_3:3243; GFX90A:       ; %bb.0:3244; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3245; GFX90A-NEXT:    v_mov_b32_e32 v4, 03246; GFX90A-NEXT:    ;;#ASMSTART3247; GFX90A-NEXT:    ; def v[0:1]3248; GFX90A-NEXT:    ;;#ASMEND3249; GFX90A-NEXT:    ;;#ASMSTART3250; GFX90A-NEXT:    ; def v[2:3]3251; GFX90A-NEXT:    ;;#ASMEND3252; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3253; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v03254; GFX90A-NEXT:    global_store_short v4, v2, s[16:17] offset:43255; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3256; GFX90A-NEXT:    s_waitcnt vmcnt(0)3257; GFX90A-NEXT:    s_setpc_b64 s[30:31]3258;3259; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_3:3260; GFX942:       ; %bb.0:3261; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3262; GFX942-NEXT:    v_mov_b32_e32 v4, 03263; GFX942-NEXT:    ;;#ASMSTART3264; GFX942-NEXT:    ; def v[0:1]3265; GFX942-NEXT:    ;;#ASMEND3266; GFX942-NEXT:    ;;#ASMSTART3267; GFX942-NEXT:    ; def v[2:3]3268; GFX942-NEXT:    ;;#ASMEND3269; GFX942-NEXT:    s_mov_b32 s2, 0xffff3270; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v03271; GFX942-NEXT:    global_store_short v4, v2, s[0:1] offset:43272; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3273; GFX942-NEXT:    s_waitcnt vmcnt(0)3274; GFX942-NEXT:    s_setpc_b64 s[30:31]3275  %vec0 = call <4 x i16> asm "; def $0", "=v"()3276  %vec1 = call <4 x i16> asm "; def $0", "=v"()3277  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3278  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3279  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 3>3280  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83281  ret void3282}3283 3284define void @v_shuffle_v3i16_v3i16__5_2_3(ptr addrspace(1) inreg %ptr) {3285; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_3:3286; GFX900:       ; %bb.0:3287; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3288; GFX900-NEXT:    v_mov_b32_e32 v4, 03289; GFX900-NEXT:    ;;#ASMSTART3290; GFX900-NEXT:    ; def v[0:1]3291; GFX900-NEXT:    ;;#ASMEND3292; GFX900-NEXT:    ;;#ASMSTART3293; GFX900-NEXT:    ; def v[2:3]3294; GFX900-NEXT:    ;;#ASMEND3295; GFX900-NEXT:    s_mov_b32 s4, 0x50401003296; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s43297; GFX900-NEXT:    global_store_short v4, v2, s[16:17] offset:43298; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3299; GFX900-NEXT:    s_waitcnt vmcnt(0)3300; GFX900-NEXT:    s_setpc_b64 s[30:31]3301;3302; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_3:3303; GFX90A:       ; %bb.0:3304; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3305; GFX90A-NEXT:    v_mov_b32_e32 v4, 03306; GFX90A-NEXT:    ;;#ASMSTART3307; GFX90A-NEXT:    ; def v[0:1]3308; GFX90A-NEXT:    ;;#ASMEND3309; GFX90A-NEXT:    ;;#ASMSTART3310; GFX90A-NEXT:    ; def v[2:3]3311; GFX90A-NEXT:    ;;#ASMEND3312; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003313; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s43314; GFX90A-NEXT:    global_store_short v4, v2, s[16:17] offset:43315; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3316; GFX90A-NEXT:    s_waitcnt vmcnt(0)3317; GFX90A-NEXT:    s_setpc_b64 s[30:31]3318;3319; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_3:3320; GFX942:       ; %bb.0:3321; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3322; GFX942-NEXT:    v_mov_b32_e32 v4, 03323; GFX942-NEXT:    ;;#ASMSTART3324; GFX942-NEXT:    ; def v[0:1]3325; GFX942-NEXT:    ;;#ASMEND3326; GFX942-NEXT:    ;;#ASMSTART3327; GFX942-NEXT:    ; def v[2:3]3328; GFX942-NEXT:    ;;#ASMEND3329; GFX942-NEXT:    s_mov_b32 s2, 0x50401003330; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s23331; GFX942-NEXT:    global_store_short v4, v2, s[0:1] offset:43332; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3333; GFX942-NEXT:    s_waitcnt vmcnt(0)3334; GFX942-NEXT:    s_setpc_b64 s[30:31]3335  %vec0 = call <4 x i16> asm "; def $0", "=v"()3336  %vec1 = call <4 x i16> asm "; def $0", "=v"()3337  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3338  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3339  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 3>3340  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83341  ret void3342}3343 3344define void @v_shuffle_v3i16_v3i16__5_4_3(ptr addrspace(1) inreg %ptr) {3345; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_3:3346; GFX900:       ; %bb.0:3347; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3348; GFX900-NEXT:    v_mov_b32_e32 v2, 03349; GFX900-NEXT:    ;;#ASMSTART3350; GFX900-NEXT:    ; def v[0:1]3351; GFX900-NEXT:    ;;#ASMEND3352; GFX900-NEXT:    s_mov_b32 s4, 0xffff3353; GFX900-NEXT:    v_bfi_b32 v1, s4, v1, v03354; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43355; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3356; GFX900-NEXT:    s_waitcnt vmcnt(0)3357; GFX900-NEXT:    s_setpc_b64 s[30:31]3358;3359; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_3:3360; GFX90A:       ; %bb.0:3361; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3362; GFX90A-NEXT:    v_mov_b32_e32 v2, 03363; GFX90A-NEXT:    ;;#ASMSTART3364; GFX90A-NEXT:    ; def v[0:1]3365; GFX90A-NEXT:    ;;#ASMEND3366; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3367; GFX90A-NEXT:    v_bfi_b32 v1, s4, v1, v03368; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43369; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3370; GFX90A-NEXT:    s_waitcnt vmcnt(0)3371; GFX90A-NEXT:    s_setpc_b64 s[30:31]3372;3373; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_3:3374; GFX942:       ; %bb.0:3375; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3376; GFX942-NEXT:    v_mov_b32_e32 v2, 03377; GFX942-NEXT:    ;;#ASMSTART3378; GFX942-NEXT:    ; def v[0:1]3379; GFX942-NEXT:    ;;#ASMEND3380; GFX942-NEXT:    s_mov_b32 s2, 0xffff3381; GFX942-NEXT:    v_bfi_b32 v1, s2, v1, v03382; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43383; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3384; GFX942-NEXT:    s_waitcnt vmcnt(0)3385; GFX942-NEXT:    s_setpc_b64 s[30:31]3386  %vec0 = call <4 x i16> asm "; def $0", "=v"()3387  %vec1 = call <4 x i16> asm "; def $0", "=v"()3388  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3389  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3390  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 3>3391  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83392  ret void3393}3394 3395define void @v_shuffle_v3i16_v3i16__u_4_4(ptr addrspace(1) inreg %ptr) {3396; GFX900-LABEL: v_shuffle_v3i16_v3i16__u_4_4:3397; GFX900:       ; %bb.0:3398; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3399; GFX900-NEXT:    v_mov_b32_e32 v2, 03400; GFX900-NEXT:    ;;#ASMSTART3401; GFX900-NEXT:    ; def v[0:1]3402; GFX900-NEXT:    ;;#ASMEND3403; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43404; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3405; GFX900-NEXT:    s_waitcnt vmcnt(0)3406; GFX900-NEXT:    s_setpc_b64 s[30:31]3407;3408; GFX90A-LABEL: v_shuffle_v3i16_v3i16__u_4_4:3409; GFX90A:       ; %bb.0:3410; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3411; GFX90A-NEXT:    v_mov_b32_e32 v2, 03412; GFX90A-NEXT:    ;;#ASMSTART3413; GFX90A-NEXT:    ; def v[0:1]3414; GFX90A-NEXT:    ;;#ASMEND3415; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43416; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3417; GFX90A-NEXT:    s_waitcnt vmcnt(0)3418; GFX90A-NEXT:    s_setpc_b64 s[30:31]3419;3420; GFX942-LABEL: v_shuffle_v3i16_v3i16__u_4_4:3421; GFX942:       ; %bb.0:3422; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3423; GFX942-NEXT:    v_mov_b32_e32 v2, 03424; GFX942-NEXT:    ;;#ASMSTART3425; GFX942-NEXT:    ; def v[0:1]3426; GFX942-NEXT:    ;;#ASMEND3427; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:43428; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3429; GFX942-NEXT:    s_waitcnt vmcnt(0)3430; GFX942-NEXT:    s_setpc_b64 s[30:31]3431  %vec0 = call <4 x i16> asm "; def $0", "=v"()3432  %vec1 = call <4 x i16> asm "; def $0", "=v"()3433  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3434  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3435  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 poison, i32 4, i32 4>3436  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83437  ret void3438}3439 3440define void @v_shuffle_v3i16_v3i16__0_4_4(ptr addrspace(1) inreg %ptr) {3441; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_4_4:3442; GFX900:       ; %bb.0:3443; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3444; GFX900-NEXT:    ;;#ASMSTART3445; GFX900-NEXT:    ; def v[0:1]3446; GFX900-NEXT:    ;;#ASMEND3447; GFX900-NEXT:    s_mov_b32 s4, 0xffff3448; GFX900-NEXT:    v_mov_b32_e32 v3, 03449; GFX900-NEXT:    ;;#ASMSTART3450; GFX900-NEXT:    ; def v[1:2]3451; GFX900-NEXT:    ;;#ASMEND3452; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v13453; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3454; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v13455; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:43456; GFX900-NEXT:    s_waitcnt vmcnt(0)3457; GFX900-NEXT:    s_setpc_b64 s[30:31]3458;3459; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_4_4:3460; GFX90A:       ; %bb.0:3461; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3462; GFX90A-NEXT:    ;;#ASMSTART3463; GFX90A-NEXT:    ; def v[0:1]3464; GFX90A-NEXT:    ;;#ASMEND3465; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3466; GFX90A-NEXT:    v_mov_b32_e32 v4, 03467; GFX90A-NEXT:    ;;#ASMSTART3468; GFX90A-NEXT:    ; def v[2:3]3469; GFX90A-NEXT:    ;;#ASMEND3470; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v23471; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3472; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v23473; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:43474; GFX90A-NEXT:    s_waitcnt vmcnt(0)3475; GFX90A-NEXT:    s_setpc_b64 s[30:31]3476;3477; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_4_4:3478; GFX942:       ; %bb.0:3479; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3480; GFX942-NEXT:    ;;#ASMSTART3481; GFX942-NEXT:    ; def v[0:1]3482; GFX942-NEXT:    ;;#ASMEND3483; GFX942-NEXT:    s_mov_b32 s2, 0xffff3484; GFX942-NEXT:    v_mov_b32_e32 v4, 03485; GFX942-NEXT:    ;;#ASMSTART3486; GFX942-NEXT:    ; def v[2:3]3487; GFX942-NEXT:    ;;#ASMEND3488; GFX942-NEXT:    s_nop 03489; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v23490; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3491; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v23492; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:43493; GFX942-NEXT:    s_waitcnt vmcnt(0)3494; GFX942-NEXT:    s_setpc_b64 s[30:31]3495  %vec0 = call <4 x i16> asm "; def $0", "=v"()3496  %vec1 = call <4 x i16> asm "; def $0", "=v"()3497  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3498  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3499  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 0, i32 4, i32 4>3500  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83501  ret void3502}3503 3504define void @v_shuffle_v3i16_v3i16__1_4_4(ptr addrspace(1) inreg %ptr) {3505; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_4_4:3506; GFX900:       ; %bb.0:3507; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3508; GFX900-NEXT:    ;;#ASMSTART3509; GFX900-NEXT:    ; def v[0:1]3510; GFX900-NEXT:    ;;#ASMEND3511; GFX900-NEXT:    s_mov_b32 s4, 0x70603023512; GFX900-NEXT:    v_mov_b32_e32 v3, 03513; GFX900-NEXT:    ;;#ASMSTART3514; GFX900-NEXT:    ; def v[1:2]3515; GFX900-NEXT:    ;;#ASMEND3516; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s43517; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3518; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v13519; GFX900-NEXT:    global_store_short v3, v0, s[16:17] offset:43520; GFX900-NEXT:    s_waitcnt vmcnt(0)3521; GFX900-NEXT:    s_setpc_b64 s[30:31]3522;3523; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_4_4:3524; GFX90A:       ; %bb.0:3525; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3526; GFX90A-NEXT:    ;;#ASMSTART3527; GFX90A-NEXT:    ; def v[0:1]3528; GFX90A-NEXT:    ;;#ASMEND3529; GFX90A-NEXT:    s_mov_b32 s4, 0x70603023530; GFX90A-NEXT:    v_mov_b32_e32 v4, 03531; GFX90A-NEXT:    ;;#ASMSTART3532; GFX90A-NEXT:    ; def v[2:3]3533; GFX90A-NEXT:    ;;#ASMEND3534; GFX90A-NEXT:    v_perm_b32 v0, v2, v0, s43535; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3536; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v23537; GFX90A-NEXT:    global_store_short v4, v0, s[16:17] offset:43538; GFX90A-NEXT:    s_waitcnt vmcnt(0)3539; GFX90A-NEXT:    s_setpc_b64 s[30:31]3540;3541; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_4_4:3542; GFX942:       ; %bb.0:3543; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3544; GFX942-NEXT:    ;;#ASMSTART3545; GFX942-NEXT:    ; def v[0:1]3546; GFX942-NEXT:    ;;#ASMEND3547; GFX942-NEXT:    s_mov_b32 s2, 0x70603023548; GFX942-NEXT:    v_mov_b32_e32 v4, 03549; GFX942-NEXT:    ;;#ASMSTART3550; GFX942-NEXT:    ; def v[2:3]3551; GFX942-NEXT:    ;;#ASMEND3552; GFX942-NEXT:    s_nop 03553; GFX942-NEXT:    v_perm_b32 v0, v2, v0, s23554; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3555; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v23556; GFX942-NEXT:    global_store_short v4, v0, s[0:1] offset:43557; GFX942-NEXT:    s_waitcnt vmcnt(0)3558; GFX942-NEXT:    s_setpc_b64 s[30:31]3559  %vec0 = call <4 x i16> asm "; def $0", "=v"()3560  %vec1 = call <4 x i16> asm "; def $0", "=v"()3561  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3562  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3563  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 1, i32 4, i32 4>3564  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83565  ret void3566}3567 3568define void @v_shuffle_v3i16_v3i16__2_4_4(ptr addrspace(1) inreg %ptr) {3569; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_4_4:3570; GFX900:       ; %bb.0:3571; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3572; GFX900-NEXT:    ;;#ASMSTART3573; GFX900-NEXT:    ; def v[0:1]3574; GFX900-NEXT:    ;;#ASMEND3575; GFX900-NEXT:    s_mov_b32 s4, 0xffff3576; GFX900-NEXT:    v_mov_b32_e32 v4, 03577; GFX900-NEXT:    ;;#ASMSTART3578; GFX900-NEXT:    ; def v[2:3]3579; GFX900-NEXT:    ;;#ASMEND3580; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v23581; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v23582; GFX900-NEXT:    global_store_short v4, v1, s[16:17] offset:43583; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3584; GFX900-NEXT:    s_waitcnt vmcnt(0)3585; GFX900-NEXT:    s_setpc_b64 s[30:31]3586;3587; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_4_4:3588; GFX90A:       ; %bb.0:3589; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3590; GFX90A-NEXT:    ;;#ASMSTART3591; GFX90A-NEXT:    ; def v[0:1]3592; GFX90A-NEXT:    ;;#ASMEND3593; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3594; GFX90A-NEXT:    v_mov_b32_e32 v4, 03595; GFX90A-NEXT:    ;;#ASMSTART3596; GFX90A-NEXT:    ; def v[2:3]3597; GFX90A-NEXT:    ;;#ASMEND3598; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v23599; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v23600; GFX90A-NEXT:    global_store_short v4, v1, s[16:17] offset:43601; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3602; GFX90A-NEXT:    s_waitcnt vmcnt(0)3603; GFX90A-NEXT:    s_setpc_b64 s[30:31]3604;3605; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_4_4:3606; GFX942:       ; %bb.0:3607; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3608; GFX942-NEXT:    ;;#ASMSTART3609; GFX942-NEXT:    ; def v[0:1]3610; GFX942-NEXT:    ;;#ASMEND3611; GFX942-NEXT:    s_mov_b32 s2, 0xffff3612; GFX942-NEXT:    v_mov_b32_e32 v4, 03613; GFX942-NEXT:    ;;#ASMSTART3614; GFX942-NEXT:    ; def v[2:3]3615; GFX942-NEXT:    ;;#ASMEND3616; GFX942-NEXT:    s_nop 03617; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v23618; GFX942-NEXT:    v_lshrrev_b32_e32 v1, 16, v23619; GFX942-NEXT:    global_store_short v4, v1, s[0:1] offset:43620; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3621; GFX942-NEXT:    s_waitcnt vmcnt(0)3622; GFX942-NEXT:    s_setpc_b64 s[30:31]3623  %vec0 = call <4 x i16> asm "; def $0", "=v"()3624  %vec1 = call <4 x i16> asm "; def $0", "=v"()3625  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3626  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3627  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 2, i32 4, i32 4>3628  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83629  ret void3630}3631 3632define void @v_shuffle_v3i16_v3i16__3_4_4(ptr addrspace(1) inreg %ptr) {3633; GFX900-LABEL: v_shuffle_v3i16_v3i16__3_4_4:3634; GFX900:       ; %bb.0:3635; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3636; GFX900-NEXT:    v_mov_b32_e32 v2, 03637; GFX900-NEXT:    ;;#ASMSTART3638; GFX900-NEXT:    ; def v[0:1]3639; GFX900-NEXT:    ;;#ASMEND3640; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43641; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3642; GFX900-NEXT:    s_waitcnt vmcnt(0)3643; GFX900-NEXT:    s_setpc_b64 s[30:31]3644;3645; GFX90A-LABEL: v_shuffle_v3i16_v3i16__3_4_4:3646; GFX90A:       ; %bb.0:3647; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3648; GFX90A-NEXT:    v_mov_b32_e32 v2, 03649; GFX90A-NEXT:    ;;#ASMSTART3650; GFX90A-NEXT:    ; def v[0:1]3651; GFX90A-NEXT:    ;;#ASMEND3652; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43653; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3654; GFX90A-NEXT:    s_waitcnt vmcnt(0)3655; GFX90A-NEXT:    s_setpc_b64 s[30:31]3656;3657; GFX942-LABEL: v_shuffle_v3i16_v3i16__3_4_4:3658; GFX942:       ; %bb.0:3659; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3660; GFX942-NEXT:    v_mov_b32_e32 v2, 03661; GFX942-NEXT:    ;;#ASMSTART3662; GFX942-NEXT:    ; def v[0:1]3663; GFX942-NEXT:    ;;#ASMEND3664; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:43665; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3666; GFX942-NEXT:    s_waitcnt vmcnt(0)3667; GFX942-NEXT:    s_setpc_b64 s[30:31]3668  %vec0 = call <4 x i16> asm "; def $0", "=v"()3669  %vec1 = call <4 x i16> asm "; def $0", "=v"()3670  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3671  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3672  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 3, i32 4, i32 4>3673  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83674  ret void3675}3676 3677define void @v_shuffle_v3i16_v3i16__4_4_4(ptr addrspace(1) inreg %ptr) {3678; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_4_4:3679; GFX900:       ; %bb.0:3680; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3681; GFX900-NEXT:    ;;#ASMSTART3682; GFX900-NEXT:    ; def v[0:1]3683; GFX900-NEXT:    ;;#ASMEND3684; GFX900-NEXT:    s_mov_b32 s4, 0x70603023685; GFX900-NEXT:    v_mov_b32_e32 v2, 03686; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s43687; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v03688; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3689; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43690; GFX900-NEXT:    s_waitcnt vmcnt(0)3691; GFX900-NEXT:    s_setpc_b64 s[30:31]3692;3693; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_4_4:3694; GFX90A:       ; %bb.0:3695; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3696; GFX90A-NEXT:    ;;#ASMSTART3697; GFX90A-NEXT:    ; def v[0:1]3698; GFX90A-NEXT:    ;;#ASMEND3699; GFX90A-NEXT:    s_mov_b32 s4, 0x70603023700; GFX90A-NEXT:    v_mov_b32_e32 v2, 03701; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s43702; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v03703; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3704; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43705; GFX90A-NEXT:    s_waitcnt vmcnt(0)3706; GFX90A-NEXT:    s_setpc_b64 s[30:31]3707;3708; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_4_4:3709; GFX942:       ; %bb.0:3710; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3711; GFX942-NEXT:    ;;#ASMSTART3712; GFX942-NEXT:    ; def v[0:1]3713; GFX942-NEXT:    ;;#ASMEND3714; GFX942-NEXT:    s_mov_b32 s2, 0x70603023715; GFX942-NEXT:    v_mov_b32_e32 v2, 03716; GFX942-NEXT:    v_perm_b32 v1, v0, v0, s23717; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v03718; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3719; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43720; GFX942-NEXT:    s_waitcnt vmcnt(0)3721; GFX942-NEXT:    s_setpc_b64 s[30:31]3722  %vec0 = call <4 x i16> asm "; def $0", "=v"()3723  %vec1 = call <4 x i16> asm "; def $0", "=v"()3724  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3725  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3726  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 4, i32 4>3727  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83728  ret void3729}3730 3731define void @v_shuffle_v3i16_v3i16__5_4_4(ptr addrspace(1) inreg %ptr) {3732; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_4:3733; GFX900:       ; %bb.0:3734; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3735; GFX900-NEXT:    ;;#ASMSTART3736; GFX900-NEXT:    ; def v[0:1]3737; GFX900-NEXT:    ;;#ASMEND3738; GFX900-NEXT:    s_mov_b32 s4, 0xffff3739; GFX900-NEXT:    v_mov_b32_e32 v2, 03740; GFX900-NEXT:    v_bfi_b32 v1, s4, v1, v03741; GFX900-NEXT:    v_lshrrev_b32_e32 v0, 16, v03742; GFX900-NEXT:    global_store_short v2, v0, s[16:17] offset:43743; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3744; GFX900-NEXT:    s_waitcnt vmcnt(0)3745; GFX900-NEXT:    s_setpc_b64 s[30:31]3746;3747; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_4:3748; GFX90A:       ; %bb.0:3749; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3750; GFX90A-NEXT:    ;;#ASMSTART3751; GFX90A-NEXT:    ; def v[0:1]3752; GFX90A-NEXT:    ;;#ASMEND3753; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3754; GFX90A-NEXT:    v_mov_b32_e32 v2, 03755; GFX90A-NEXT:    v_bfi_b32 v1, s4, v1, v03756; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, 16, v03757; GFX90A-NEXT:    global_store_short v2, v0, s[16:17] offset:43758; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3759; GFX90A-NEXT:    s_waitcnt vmcnt(0)3760; GFX90A-NEXT:    s_setpc_b64 s[30:31]3761;3762; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_4:3763; GFX942:       ; %bb.0:3764; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3765; GFX942-NEXT:    ;;#ASMSTART3766; GFX942-NEXT:    ; def v[0:1]3767; GFX942-NEXT:    ;;#ASMEND3768; GFX942-NEXT:    s_mov_b32 s2, 0xffff3769; GFX942-NEXT:    v_mov_b32_e32 v2, 03770; GFX942-NEXT:    v_bfi_b32 v1, s2, v1, v03771; GFX942-NEXT:    v_lshrrev_b32_e32 v0, 16, v03772; GFX942-NEXT:    global_store_short v2, v0, s[0:1] offset:43773; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3774; GFX942-NEXT:    s_waitcnt vmcnt(0)3775; GFX942-NEXT:    s_setpc_b64 s[30:31]3776  %vec0 = call <4 x i16> asm "; def $0", "=v"()3777  %vec1 = call <4 x i16> asm "; def $0", "=v"()3778  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3779  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3780  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 4>3781  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83782  ret void3783}3784 3785define void @v_shuffle_v3i16_v3i16__5_u_4(ptr addrspace(1) inreg %ptr) {3786; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_4:3787; GFX900:       ; %bb.0:3788; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3789; GFX900-NEXT:    v_mov_b32_e32 v2, 03790; GFX900-NEXT:    ;;#ASMSTART3791; GFX900-NEXT:    ; def v[0:1]3792; GFX900-NEXT:    ;;#ASMEND3793; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43794; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3795; GFX900-NEXT:    s_waitcnt vmcnt(0)3796; GFX900-NEXT:    s_setpc_b64 s[30:31]3797;3798; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_4:3799; GFX90A:       ; %bb.0:3800; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3801; GFX90A-NEXT:    v_mov_b32_e32 v2, 03802; GFX90A-NEXT:    ;;#ASMSTART3803; GFX90A-NEXT:    ; def v[0:1]3804; GFX90A-NEXT:    ;;#ASMEND3805; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:43806; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3807; GFX90A-NEXT:    s_waitcnt vmcnt(0)3808; GFX90A-NEXT:    s_setpc_b64 s[30:31]3809;3810; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_4:3811; GFX942:       ; %bb.0:3812; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3813; GFX942-NEXT:    v_mov_b32_e32 v2, 03814; GFX942-NEXT:    ;;#ASMSTART3815; GFX942-NEXT:    ; def v[0:1]3816; GFX942-NEXT:    ;;#ASMEND3817; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:43818; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3819; GFX942-NEXT:    s_waitcnt vmcnt(0)3820; GFX942-NEXT:    s_setpc_b64 s[30:31]3821  %vec0 = call <4 x i16> asm "; def $0", "=v"()3822  %vec1 = call <4 x i16> asm "; def $0", "=v"()3823  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3824  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3825  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 4>3826  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83827  ret void3828}3829 3830define void @v_shuffle_v3i16_v3i16__5_0_4(ptr addrspace(1) inreg %ptr) {3831; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_4:3832; GFX900:       ; %bb.0:3833; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3834; GFX900-NEXT:    ;;#ASMSTART3835; GFX900-NEXT:    ; def v[0:1]3836; GFX900-NEXT:    ;;#ASMEND3837; GFX900-NEXT:    v_mov_b32_e32 v3, 03838; GFX900-NEXT:    ;;#ASMSTART3839; GFX900-NEXT:    ; def v[1:2]3840; GFX900-NEXT:    ;;#ASMEND3841; GFX900-NEXT:    s_mov_b32 s4, 0x50401003842; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s43843; GFX900-NEXT:    global_store_short_d16_hi v3, v1, s[16:17] offset:43844; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3845; GFX900-NEXT:    s_waitcnt vmcnt(0)3846; GFX900-NEXT:    s_setpc_b64 s[30:31]3847;3848; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_4:3849; GFX90A:       ; %bb.0:3850; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3851; GFX90A-NEXT:    v_mov_b32_e32 v4, 03852; GFX90A-NEXT:    ;;#ASMSTART3853; GFX90A-NEXT:    ; def v[0:1]3854; GFX90A-NEXT:    ;;#ASMEND3855; GFX90A-NEXT:    ;;#ASMSTART3856; GFX90A-NEXT:    ; def v[2:3]3857; GFX90A-NEXT:    ;;#ASMEND3858; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003859; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s43860; GFX90A-NEXT:    global_store_short_d16_hi v4, v2, s[16:17] offset:43861; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3862; GFX90A-NEXT:    s_waitcnt vmcnt(0)3863; GFX90A-NEXT:    s_setpc_b64 s[30:31]3864;3865; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_4:3866; GFX942:       ; %bb.0:3867; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3868; GFX942-NEXT:    v_mov_b32_e32 v4, 03869; GFX942-NEXT:    ;;#ASMSTART3870; GFX942-NEXT:    ; def v[0:1]3871; GFX942-NEXT:    ;;#ASMEND3872; GFX942-NEXT:    ;;#ASMSTART3873; GFX942-NEXT:    ; def v[2:3]3874; GFX942-NEXT:    ;;#ASMEND3875; GFX942-NEXT:    s_mov_b32 s2, 0x50401003876; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s23877; GFX942-NEXT:    global_store_short_d16_hi v4, v2, s[0:1] offset:43878; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3879; GFX942-NEXT:    s_waitcnt vmcnt(0)3880; GFX942-NEXT:    s_setpc_b64 s[30:31]3881  %vec0 = call <4 x i16> asm "; def $0", "=v"()3882  %vec1 = call <4 x i16> asm "; def $0", "=v"()3883  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3884  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3885  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 4>3886  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83887  ret void3888}3889 3890define void @v_shuffle_v3i16_v3i16__5_1_4(ptr addrspace(1) inreg %ptr) {3891; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_4:3892; GFX900:       ; %bb.0:3893; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3894; GFX900-NEXT:    ;;#ASMSTART3895; GFX900-NEXT:    ; def v[0:1]3896; GFX900-NEXT:    ;;#ASMEND3897; GFX900-NEXT:    v_mov_b32_e32 v3, 03898; GFX900-NEXT:    ;;#ASMSTART3899; GFX900-NEXT:    ; def v[1:2]3900; GFX900-NEXT:    ;;#ASMEND3901; GFX900-NEXT:    s_mov_b32 s4, 0xffff3902; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v03903; GFX900-NEXT:    global_store_short_d16_hi v3, v1, s[16:17] offset:43904; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3905; GFX900-NEXT:    s_waitcnt vmcnt(0)3906; GFX900-NEXT:    s_setpc_b64 s[30:31]3907;3908; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_4:3909; GFX90A:       ; %bb.0:3910; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3911; GFX90A-NEXT:    v_mov_b32_e32 v4, 03912; GFX90A-NEXT:    ;;#ASMSTART3913; GFX90A-NEXT:    ; def v[0:1]3914; GFX90A-NEXT:    ;;#ASMEND3915; GFX90A-NEXT:    ;;#ASMSTART3916; GFX90A-NEXT:    ; def v[2:3]3917; GFX90A-NEXT:    ;;#ASMEND3918; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3919; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v03920; GFX90A-NEXT:    global_store_short_d16_hi v4, v2, s[16:17] offset:43921; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3922; GFX90A-NEXT:    s_waitcnt vmcnt(0)3923; GFX90A-NEXT:    s_setpc_b64 s[30:31]3924;3925; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_4:3926; GFX942:       ; %bb.0:3927; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3928; GFX942-NEXT:    v_mov_b32_e32 v4, 03929; GFX942-NEXT:    ;;#ASMSTART3930; GFX942-NEXT:    ; def v[0:1]3931; GFX942-NEXT:    ;;#ASMEND3932; GFX942-NEXT:    ;;#ASMSTART3933; GFX942-NEXT:    ; def v[2:3]3934; GFX942-NEXT:    ;;#ASMEND3935; GFX942-NEXT:    s_mov_b32 s2, 0xffff3936; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v03937; GFX942-NEXT:    global_store_short_d16_hi v4, v2, s[0:1] offset:43938; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3939; GFX942-NEXT:    s_waitcnt vmcnt(0)3940; GFX942-NEXT:    s_setpc_b64 s[30:31]3941  %vec0 = call <4 x i16> asm "; def $0", "=v"()3942  %vec1 = call <4 x i16> asm "; def $0", "=v"()3943  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3944  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3945  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 4>3946  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 83947  ret void3948}3949 3950define void @v_shuffle_v3i16_v3i16__5_2_4(ptr addrspace(1) inreg %ptr) {3951; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_4:3952; GFX900:       ; %bb.0:3953; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3954; GFX900-NEXT:    v_mov_b32_e32 v4, 03955; GFX900-NEXT:    ;;#ASMSTART3956; GFX900-NEXT:    ; def v[0:1]3957; GFX900-NEXT:    ;;#ASMEND3958; GFX900-NEXT:    ;;#ASMSTART3959; GFX900-NEXT:    ; def v[2:3]3960; GFX900-NEXT:    ;;#ASMEND3961; GFX900-NEXT:    s_mov_b32 s4, 0x50401003962; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s43963; GFX900-NEXT:    global_store_short_d16_hi v4, v2, s[16:17] offset:43964; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3965; GFX900-NEXT:    s_waitcnt vmcnt(0)3966; GFX900-NEXT:    s_setpc_b64 s[30:31]3967;3968; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_4:3969; GFX90A:       ; %bb.0:3970; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3971; GFX90A-NEXT:    v_mov_b32_e32 v4, 03972; GFX90A-NEXT:    ;;#ASMSTART3973; GFX90A-NEXT:    ; def v[0:1]3974; GFX90A-NEXT:    ;;#ASMEND3975; GFX90A-NEXT:    ;;#ASMSTART3976; GFX90A-NEXT:    ; def v[2:3]3977; GFX90A-NEXT:    ;;#ASMEND3978; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003979; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s43980; GFX90A-NEXT:    global_store_short_d16_hi v4, v2, s[16:17] offset:43981; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3982; GFX90A-NEXT:    s_waitcnt vmcnt(0)3983; GFX90A-NEXT:    s_setpc_b64 s[30:31]3984;3985; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_4:3986; GFX942:       ; %bb.0:3987; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3988; GFX942-NEXT:    v_mov_b32_e32 v4, 03989; GFX942-NEXT:    ;;#ASMSTART3990; GFX942-NEXT:    ; def v[0:1]3991; GFX942-NEXT:    ;;#ASMEND3992; GFX942-NEXT:    ;;#ASMSTART3993; GFX942-NEXT:    ; def v[2:3]3994; GFX942-NEXT:    ;;#ASMEND3995; GFX942-NEXT:    s_mov_b32 s2, 0x50401003996; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s23997; GFX942-NEXT:    global_store_short_d16_hi v4, v2, s[0:1] offset:43998; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3999; GFX942-NEXT:    s_waitcnt vmcnt(0)4000; GFX942-NEXT:    s_setpc_b64 s[30:31]4001  %vec0 = call <4 x i16> asm "; def $0", "=v"()4002  %vec1 = call <4 x i16> asm "; def $0", "=v"()4003  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4004  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4005  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 4>4006  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84007  ret void4008}4009 4010define void @v_shuffle_v3i16_v3i16__5_3_4(ptr addrspace(1) inreg %ptr) {4011; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_4:4012; GFX900:       ; %bb.0:4013; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4014; GFX900-NEXT:    v_mov_b32_e32 v2, 04015; GFX900-NEXT:    ;;#ASMSTART4016; GFX900-NEXT:    ; def v[0:1]4017; GFX900-NEXT:    ;;#ASMEND4018; GFX900-NEXT:    s_mov_b32 s4, 0x50401004019; GFX900-NEXT:    v_perm_b32 v1, v0, v1, s44020; GFX900-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:44021; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]4022; GFX900-NEXT:    s_waitcnt vmcnt(0)4023; GFX900-NEXT:    s_setpc_b64 s[30:31]4024;4025; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_4:4026; GFX90A:       ; %bb.0:4027; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4028; GFX90A-NEXT:    v_mov_b32_e32 v2, 04029; GFX90A-NEXT:    ;;#ASMSTART4030; GFX90A-NEXT:    ; def v[0:1]4031; GFX90A-NEXT:    ;;#ASMEND4032; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004033; GFX90A-NEXT:    v_perm_b32 v1, v0, v1, s44034; GFX90A-NEXT:    global_store_short_d16_hi v2, v0, s[16:17] offset:44035; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]4036; GFX90A-NEXT:    s_waitcnt vmcnt(0)4037; GFX90A-NEXT:    s_setpc_b64 s[30:31]4038;4039; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_4:4040; GFX942:       ; %bb.0:4041; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4042; GFX942-NEXT:    v_mov_b32_e32 v2, 04043; GFX942-NEXT:    ;;#ASMSTART4044; GFX942-NEXT:    ; def v[0:1]4045; GFX942-NEXT:    ;;#ASMEND4046; GFX942-NEXT:    s_mov_b32 s2, 0x50401004047; GFX942-NEXT:    v_perm_b32 v1, v0, v1, s24048; GFX942-NEXT:    global_store_short_d16_hi v2, v0, s[0:1] offset:44049; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]4050; GFX942-NEXT:    s_waitcnt vmcnt(0)4051; GFX942-NEXT:    s_setpc_b64 s[30:31]4052  %vec0 = call <4 x i16> asm "; def $0", "=v"()4053  %vec1 = call <4 x i16> asm "; def $0", "=v"()4054  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4055  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4056  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 4>4057  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84058  ret void4059}4060 4061define void @v_shuffle_v3i16_v3i16__u_5_5(ptr addrspace(1) inreg %ptr) {4062; GFX900-LABEL: v_shuffle_v3i16_v3i16__u_5_5:4063; GFX900:       ; %bb.0:4064; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4065; GFX900-NEXT:    v_mov_b32_e32 v2, 04066; GFX900-NEXT:    ;;#ASMSTART4067; GFX900-NEXT:    ; def v[0:1]4068; GFX900-NEXT:    ;;#ASMEND4069; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v14070; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44071; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]4072; GFX900-NEXT:    s_waitcnt vmcnt(0)4073; GFX900-NEXT:    s_setpc_b64 s[30:31]4074;4075; GFX90A-LABEL: v_shuffle_v3i16_v3i16__u_5_5:4076; GFX90A:       ; %bb.0:4077; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4078; GFX90A-NEXT:    v_mov_b32_e32 v2, 04079; GFX90A-NEXT:    ;;#ASMSTART4080; GFX90A-NEXT:    ; def v[0:1]4081; GFX90A-NEXT:    ;;#ASMEND4082; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v14083; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44084; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]4085; GFX90A-NEXT:    s_waitcnt vmcnt(0)4086; GFX90A-NEXT:    s_setpc_b64 s[30:31]4087;4088; GFX942-LABEL: v_shuffle_v3i16_v3i16__u_5_5:4089; GFX942:       ; %bb.0:4090; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4091; GFX942-NEXT:    v_mov_b32_e32 v2, 04092; GFX942-NEXT:    ;;#ASMSTART4093; GFX942-NEXT:    ; def v[0:1]4094; GFX942-NEXT:    ;;#ASMEND4095; GFX942-NEXT:    s_nop 04096; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v14097; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44098; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]4099; GFX942-NEXT:    s_waitcnt vmcnt(0)4100; GFX942-NEXT:    s_setpc_b64 s[30:31]4101  %vec0 = call <4 x i16> asm "; def $0", "=v"()4102  %vec1 = call <4 x i16> asm "; def $0", "=v"()4103  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4104  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4105  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 poison, i32 5, i32 5>4106  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84107  ret void4108}4109 4110define void @v_shuffle_v3i16_v3i16__0_5_5(ptr addrspace(1) inreg %ptr) {4111; GFX900-LABEL: v_shuffle_v3i16_v3i16__0_5_5:4112; GFX900:       ; %bb.0:4113; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4114; GFX900-NEXT:    ;;#ASMSTART4115; GFX900-NEXT:    ; def v[0:1]4116; GFX900-NEXT:    ;;#ASMEND4117; GFX900-NEXT:    v_mov_b32_e32 v3, 04118; GFX900-NEXT:    ;;#ASMSTART4119; GFX900-NEXT:    ; def v[1:2]4120; GFX900-NEXT:    ;;#ASMEND4121; GFX900-NEXT:    s_mov_b32 s4, 0x50401004122; GFX900-NEXT:    v_perm_b32 v0, v2, v0, s44123; GFX900-NEXT:    global_store_short v3, v2, s[16:17] offset:44124; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]4125; GFX900-NEXT:    s_waitcnt vmcnt(0)4126; GFX900-NEXT:    s_setpc_b64 s[30:31]4127;4128; GFX90A-LABEL: v_shuffle_v3i16_v3i16__0_5_5:4129; GFX90A:       ; %bb.0:4130; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4131; GFX90A-NEXT:    v_mov_b32_e32 v4, 04132; GFX90A-NEXT:    ;;#ASMSTART4133; GFX90A-NEXT:    ; def v[0:1]4134; GFX90A-NEXT:    ;;#ASMEND4135; GFX90A-NEXT:    ;;#ASMSTART4136; GFX90A-NEXT:    ; def v[2:3]4137; GFX90A-NEXT:    ;;#ASMEND4138; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004139; GFX90A-NEXT:    v_perm_b32 v0, v3, v0, s44140; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44141; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4142; GFX90A-NEXT:    s_waitcnt vmcnt(0)4143; GFX90A-NEXT:    s_setpc_b64 s[30:31]4144;4145; GFX942-LABEL: v_shuffle_v3i16_v3i16__0_5_5:4146; GFX942:       ; %bb.0:4147; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4148; GFX942-NEXT:    v_mov_b32_e32 v4, 04149; GFX942-NEXT:    ;;#ASMSTART4150; GFX942-NEXT:    ; def v[0:1]4151; GFX942-NEXT:    ;;#ASMEND4152; GFX942-NEXT:    ;;#ASMSTART4153; GFX942-NEXT:    ; def v[2:3]4154; GFX942-NEXT:    ;;#ASMEND4155; GFX942-NEXT:    s_mov_b32 s2, 0x50401004156; GFX942-NEXT:    v_perm_b32 v0, v3, v0, s24157; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44158; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4159; GFX942-NEXT:    s_waitcnt vmcnt(0)4160; GFX942-NEXT:    s_setpc_b64 s[30:31]4161  %vec0 = call <4 x i16> asm "; def $0", "=v"()4162  %vec1 = call <4 x i16> asm "; def $0", "=v"()4163  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4164  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4165  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 0, i32 5, i32 5>4166  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84167  ret void4168}4169 4170define void @v_shuffle_v3i16_v3i16__1_5_5(ptr addrspace(1) inreg %ptr) {4171; GFX900-LABEL: v_shuffle_v3i16_v3i16__1_5_5:4172; GFX900:       ; %bb.0:4173; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4174; GFX900-NEXT:    ;;#ASMSTART4175; GFX900-NEXT:    ; def v[0:1]4176; GFX900-NEXT:    ;;#ASMEND4177; GFX900-NEXT:    v_mov_b32_e32 v3, 04178; GFX900-NEXT:    ;;#ASMSTART4179; GFX900-NEXT:    ; def v[1:2]4180; GFX900-NEXT:    ;;#ASMEND4181; GFX900-NEXT:    v_alignbit_b32 v0, v2, v0, 164182; GFX900-NEXT:    global_store_short v3, v2, s[16:17] offset:44183; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]4184; GFX900-NEXT:    s_waitcnt vmcnt(0)4185; GFX900-NEXT:    s_setpc_b64 s[30:31]4186;4187; GFX90A-LABEL: v_shuffle_v3i16_v3i16__1_5_5:4188; GFX90A:       ; %bb.0:4189; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4190; GFX90A-NEXT:    v_mov_b32_e32 v4, 04191; GFX90A-NEXT:    ;;#ASMSTART4192; GFX90A-NEXT:    ; def v[0:1]4193; GFX90A-NEXT:    ;;#ASMEND4194; GFX90A-NEXT:    ;;#ASMSTART4195; GFX90A-NEXT:    ; def v[2:3]4196; GFX90A-NEXT:    ;;#ASMEND4197; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v0, 164198; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44199; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4200; GFX90A-NEXT:    s_waitcnt vmcnt(0)4201; GFX90A-NEXT:    s_setpc_b64 s[30:31]4202;4203; GFX942-LABEL: v_shuffle_v3i16_v3i16__1_5_5:4204; GFX942:       ; %bb.0:4205; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4206; GFX942-NEXT:    v_mov_b32_e32 v4, 04207; GFX942-NEXT:    ;;#ASMSTART4208; GFX942-NEXT:    ; def v[0:1]4209; GFX942-NEXT:    ;;#ASMEND4210; GFX942-NEXT:    ;;#ASMSTART4211; GFX942-NEXT:    ; def v[2:3]4212; GFX942-NEXT:    ;;#ASMEND4213; GFX942-NEXT:    s_nop 04214; GFX942-NEXT:    v_alignbit_b32 v0, v3, v0, 164215; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44216; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4217; GFX942-NEXT:    s_waitcnt vmcnt(0)4218; GFX942-NEXT:    s_setpc_b64 s[30:31]4219  %vec0 = call <4 x i16> asm "; def $0", "=v"()4220  %vec1 = call <4 x i16> asm "; def $0", "=v"()4221  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4222  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4223  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 1, i32 5, i32 5>4224  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84225  ret void4226}4227 4228define void @v_shuffle_v3i16_v3i16__2_5_5(ptr addrspace(1) inreg %ptr) {4229; GFX900-LABEL: v_shuffle_v3i16_v3i16__2_5_5:4230; GFX900:       ; %bb.0:4231; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4232; GFX900-NEXT:    v_mov_b32_e32 v4, 04233; GFX900-NEXT:    ;;#ASMSTART4234; GFX900-NEXT:    ; def v[0:1]4235; GFX900-NEXT:    ;;#ASMEND4236; GFX900-NEXT:    ;;#ASMSTART4237; GFX900-NEXT:    ; def v[2:3]4238; GFX900-NEXT:    ;;#ASMEND4239; GFX900-NEXT:    s_mov_b32 s4, 0x50401004240; GFX900-NEXT:    v_perm_b32 v0, v3, v1, s44241; GFX900-NEXT:    global_store_short v4, v3, s[16:17] offset:44242; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]4243; GFX900-NEXT:    s_waitcnt vmcnt(0)4244; GFX900-NEXT:    s_setpc_b64 s[30:31]4245;4246; GFX90A-LABEL: v_shuffle_v3i16_v3i16__2_5_5:4247; GFX90A:       ; %bb.0:4248; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4249; GFX90A-NEXT:    v_mov_b32_e32 v4, 04250; GFX90A-NEXT:    ;;#ASMSTART4251; GFX90A-NEXT:    ; def v[0:1]4252; GFX90A-NEXT:    ;;#ASMEND4253; GFX90A-NEXT:    ;;#ASMSTART4254; GFX90A-NEXT:    ; def v[2:3]4255; GFX90A-NEXT:    ;;#ASMEND4256; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004257; GFX90A-NEXT:    v_perm_b32 v0, v3, v1, s44258; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44259; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4260; GFX90A-NEXT:    s_waitcnt vmcnt(0)4261; GFX90A-NEXT:    s_setpc_b64 s[30:31]4262;4263; GFX942-LABEL: v_shuffle_v3i16_v3i16__2_5_5:4264; GFX942:       ; %bb.0:4265; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4266; GFX942-NEXT:    v_mov_b32_e32 v4, 04267; GFX942-NEXT:    ;;#ASMSTART4268; GFX942-NEXT:    ; def v[0:1]4269; GFX942-NEXT:    ;;#ASMEND4270; GFX942-NEXT:    ;;#ASMSTART4271; GFX942-NEXT:    ; def v[2:3]4272; GFX942-NEXT:    ;;#ASMEND4273; GFX942-NEXT:    s_mov_b32 s2, 0x50401004274; GFX942-NEXT:    v_perm_b32 v0, v3, v1, s24275; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44276; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4277; GFX942-NEXT:    s_waitcnt vmcnt(0)4278; GFX942-NEXT:    s_setpc_b64 s[30:31]4279  %vec0 = call <4 x i16> asm "; def $0", "=v"()4280  %vec1 = call <4 x i16> asm "; def $0", "=v"()4281  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4282  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4283  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 2, i32 5, i32 5>4284  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84285  ret void4286}4287 4288define void @v_shuffle_v3i16_v3i16__3_5_5(ptr addrspace(1) inreg %ptr) {4289; GFX900-LABEL: v_shuffle_v3i16_v3i16__3_5_5:4290; GFX900:       ; %bb.0:4291; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4292; GFX900-NEXT:    v_mov_b32_e32 v2, 04293; GFX900-NEXT:    ;;#ASMSTART4294; GFX900-NEXT:    ; def v[0:1]4295; GFX900-NEXT:    ;;#ASMEND4296; GFX900-NEXT:    s_mov_b32 s4, 0x50401004297; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s44298; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44299; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]4300; GFX900-NEXT:    s_waitcnt vmcnt(0)4301; GFX900-NEXT:    s_setpc_b64 s[30:31]4302;4303; GFX90A-LABEL: v_shuffle_v3i16_v3i16__3_5_5:4304; GFX90A:       ; %bb.0:4305; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4306; GFX90A-NEXT:    v_mov_b32_e32 v2, 04307; GFX90A-NEXT:    ;;#ASMSTART4308; GFX90A-NEXT:    ; def v[0:1]4309; GFX90A-NEXT:    ;;#ASMEND4310; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004311; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s44312; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44313; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]4314; GFX90A-NEXT:    s_waitcnt vmcnt(0)4315; GFX90A-NEXT:    s_setpc_b64 s[30:31]4316;4317; GFX942-LABEL: v_shuffle_v3i16_v3i16__3_5_5:4318; GFX942:       ; %bb.0:4319; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4320; GFX942-NEXT:    v_mov_b32_e32 v2, 04321; GFX942-NEXT:    ;;#ASMSTART4322; GFX942-NEXT:    ; def v[0:1]4323; GFX942-NEXT:    ;;#ASMEND4324; GFX942-NEXT:    s_mov_b32 s2, 0x50401004325; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s24326; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44327; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]4328; GFX942-NEXT:    s_waitcnt vmcnt(0)4329; GFX942-NEXT:    s_setpc_b64 s[30:31]4330  %vec0 = call <4 x i16> asm "; def $0", "=v"()4331  %vec1 = call <4 x i16> asm "; def $0", "=v"()4332  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4333  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4334  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 3, i32 5, i32 5>4335  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84336  ret void4337}4338 4339define void @v_shuffle_v3i16_v3i16__4_5_5(ptr addrspace(1) inreg %ptr) {4340; GFX900-LABEL: v_shuffle_v3i16_v3i16__4_5_5:4341; GFX900:       ; %bb.0:4342; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4343; GFX900-NEXT:    v_mov_b32_e32 v2, 04344; GFX900-NEXT:    ;;#ASMSTART4345; GFX900-NEXT:    ; def v[0:1]4346; GFX900-NEXT:    ;;#ASMEND4347; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 164348; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44349; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]4350; GFX900-NEXT:    s_waitcnt vmcnt(0)4351; GFX900-NEXT:    s_setpc_b64 s[30:31]4352;4353; GFX90A-LABEL: v_shuffle_v3i16_v3i16__4_5_5:4354; GFX90A:       ; %bb.0:4355; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4356; GFX90A-NEXT:    v_mov_b32_e32 v2, 04357; GFX90A-NEXT:    ;;#ASMSTART4358; GFX90A-NEXT:    ; def v[0:1]4359; GFX90A-NEXT:    ;;#ASMEND4360; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 164361; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44362; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]4363; GFX90A-NEXT:    s_waitcnt vmcnt(0)4364; GFX90A-NEXT:    s_setpc_b64 s[30:31]4365;4366; GFX942-LABEL: v_shuffle_v3i16_v3i16__4_5_5:4367; GFX942:       ; %bb.0:4368; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4369; GFX942-NEXT:    v_mov_b32_e32 v2, 04370; GFX942-NEXT:    ;;#ASMSTART4371; GFX942-NEXT:    ; def v[0:1]4372; GFX942-NEXT:    ;;#ASMEND4373; GFX942-NEXT:    s_nop 04374; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 164375; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44376; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]4377; GFX942-NEXT:    s_waitcnt vmcnt(0)4378; GFX942-NEXT:    s_setpc_b64 s[30:31]4379  %vec0 = call <4 x i16> asm "; def $0", "=v"()4380  %vec1 = call <4 x i16> asm "; def $0", "=v"()4381  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4382  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4383  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 5, i32 5>4384  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84385  ret void4386}4387 4388define void @v_shuffle_v3i16_v3i16__5_u_5(ptr addrspace(1) inreg %ptr) {4389; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_u_5:4390; GFX900:       ; %bb.0:4391; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4392; GFX900-NEXT:    v_mov_b32_e32 v2, 04393; GFX900-NEXT:    ;;#ASMSTART4394; GFX900-NEXT:    ; def v[0:1]4395; GFX900-NEXT:    ;;#ASMEND4396; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44397; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]4398; GFX900-NEXT:    s_waitcnt vmcnt(0)4399; GFX900-NEXT:    s_setpc_b64 s[30:31]4400;4401; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_u_5:4402; GFX90A:       ; %bb.0:4403; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4404; GFX90A-NEXT:    v_mov_b32_e32 v2, 04405; GFX90A-NEXT:    ;;#ASMSTART4406; GFX90A-NEXT:    ; def v[0:1]4407; GFX90A-NEXT:    ;;#ASMEND4408; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44409; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]4410; GFX90A-NEXT:    s_waitcnt vmcnt(0)4411; GFX90A-NEXT:    s_setpc_b64 s[30:31]4412;4413; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_u_5:4414; GFX942:       ; %bb.0:4415; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4416; GFX942-NEXT:    v_mov_b32_e32 v2, 04417; GFX942-NEXT:    ;;#ASMSTART4418; GFX942-NEXT:    ; def v[0:1]4419; GFX942-NEXT:    ;;#ASMEND4420; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44421; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]4422; GFX942-NEXT:    s_waitcnt vmcnt(0)4423; GFX942-NEXT:    s_setpc_b64 s[30:31]4424  %vec0 = call <4 x i16> asm "; def $0", "=v"()4425  %vec1 = call <4 x i16> asm "; def $0", "=v"()4426  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4427  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4428  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 5>4429  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84430  ret void4431}4432 4433define void @v_shuffle_v3i16_v3i16__5_0_5(ptr addrspace(1) inreg %ptr) {4434; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_0_5:4435; GFX900:       ; %bb.0:4436; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4437; GFX900-NEXT:    ;;#ASMSTART4438; GFX900-NEXT:    ; def v[0:1]4439; GFX900-NEXT:    ;;#ASMEND4440; GFX900-NEXT:    v_mov_b32_e32 v3, 04441; GFX900-NEXT:    ;;#ASMSTART4442; GFX900-NEXT:    ; def v[1:2]4443; GFX900-NEXT:    ;;#ASMEND4444; GFX900-NEXT:    s_mov_b32 s4, 0x50401004445; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s44446; GFX900-NEXT:    global_store_short v3, v2, s[16:17] offset:44447; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]4448; GFX900-NEXT:    s_waitcnt vmcnt(0)4449; GFX900-NEXT:    s_setpc_b64 s[30:31]4450;4451; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_0_5:4452; GFX90A:       ; %bb.0:4453; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4454; GFX90A-NEXT:    v_mov_b32_e32 v4, 04455; GFX90A-NEXT:    ;;#ASMSTART4456; GFX90A-NEXT:    ; def v[0:1]4457; GFX90A-NEXT:    ;;#ASMEND4458; GFX90A-NEXT:    ;;#ASMSTART4459; GFX90A-NEXT:    ; def v[2:3]4460; GFX90A-NEXT:    ;;#ASMEND4461; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004462; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s44463; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44464; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4465; GFX90A-NEXT:    s_waitcnt vmcnt(0)4466; GFX90A-NEXT:    s_setpc_b64 s[30:31]4467;4468; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_0_5:4469; GFX942:       ; %bb.0:4470; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4471; GFX942-NEXT:    v_mov_b32_e32 v4, 04472; GFX942-NEXT:    ;;#ASMSTART4473; GFX942-NEXT:    ; def v[0:1]4474; GFX942-NEXT:    ;;#ASMEND4475; GFX942-NEXT:    ;;#ASMSTART4476; GFX942-NEXT:    ; def v[2:3]4477; GFX942-NEXT:    ;;#ASMEND4478; GFX942-NEXT:    s_mov_b32 s2, 0x50401004479; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s24480; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44481; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4482; GFX942-NEXT:    s_waitcnt vmcnt(0)4483; GFX942-NEXT:    s_setpc_b64 s[30:31]4484  %vec0 = call <4 x i16> asm "; def $0", "=v"()4485  %vec1 = call <4 x i16> asm "; def $0", "=v"()4486  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4487  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4488  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 5>4489  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84490  ret void4491}4492 4493define void @v_shuffle_v3i16_v3i16__5_1_5(ptr addrspace(1) inreg %ptr) {4494; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_1_5:4495; GFX900:       ; %bb.0:4496; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4497; GFX900-NEXT:    ;;#ASMSTART4498; GFX900-NEXT:    ; def v[0:1]4499; GFX900-NEXT:    ;;#ASMEND4500; GFX900-NEXT:    v_mov_b32_e32 v3, 04501; GFX900-NEXT:    ;;#ASMSTART4502; GFX900-NEXT:    ; def v[1:2]4503; GFX900-NEXT:    ;;#ASMEND4504; GFX900-NEXT:    s_mov_b32 s4, 0xffff4505; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v04506; GFX900-NEXT:    global_store_short v3, v2, s[16:17] offset:44507; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]4508; GFX900-NEXT:    s_waitcnt vmcnt(0)4509; GFX900-NEXT:    s_setpc_b64 s[30:31]4510;4511; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_1_5:4512; GFX90A:       ; %bb.0:4513; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4514; GFX90A-NEXT:    v_mov_b32_e32 v4, 04515; GFX90A-NEXT:    ;;#ASMSTART4516; GFX90A-NEXT:    ; def v[0:1]4517; GFX90A-NEXT:    ;;#ASMEND4518; GFX90A-NEXT:    ;;#ASMSTART4519; GFX90A-NEXT:    ; def v[2:3]4520; GFX90A-NEXT:    ;;#ASMEND4521; GFX90A-NEXT:    s_mov_b32 s4, 0xffff4522; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v04523; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44524; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4525; GFX90A-NEXT:    s_waitcnt vmcnt(0)4526; GFX90A-NEXT:    s_setpc_b64 s[30:31]4527;4528; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_1_5:4529; GFX942:       ; %bb.0:4530; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4531; GFX942-NEXT:    v_mov_b32_e32 v4, 04532; GFX942-NEXT:    ;;#ASMSTART4533; GFX942-NEXT:    ; def v[0:1]4534; GFX942-NEXT:    ;;#ASMEND4535; GFX942-NEXT:    ;;#ASMSTART4536; GFX942-NEXT:    ; def v[2:3]4537; GFX942-NEXT:    ;;#ASMEND4538; GFX942-NEXT:    s_mov_b32 s2, 0xffff4539; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v04540; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44541; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4542; GFX942-NEXT:    s_waitcnt vmcnt(0)4543; GFX942-NEXT:    s_setpc_b64 s[30:31]4544  %vec0 = call <4 x i16> asm "; def $0", "=v"()4545  %vec1 = call <4 x i16> asm "; def $0", "=v"()4546  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4547  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4548  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 5>4549  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84550  ret void4551}4552 4553define void @v_shuffle_v3i16_v3i16__5_2_5(ptr addrspace(1) inreg %ptr) {4554; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_2_5:4555; GFX900:       ; %bb.0:4556; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4557; GFX900-NEXT:    v_mov_b32_e32 v4, 04558; GFX900-NEXT:    ;;#ASMSTART4559; GFX900-NEXT:    ; def v[0:1]4560; GFX900-NEXT:    ;;#ASMEND4561; GFX900-NEXT:    ;;#ASMSTART4562; GFX900-NEXT:    ; def v[2:3]4563; GFX900-NEXT:    ;;#ASMEND4564; GFX900-NEXT:    s_mov_b32 s4, 0x50401004565; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s44566; GFX900-NEXT:    global_store_short v4, v3, s[16:17] offset:44567; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]4568; GFX900-NEXT:    s_waitcnt vmcnt(0)4569; GFX900-NEXT:    s_setpc_b64 s[30:31]4570;4571; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_2_5:4572; GFX90A:       ; %bb.0:4573; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4574; GFX90A-NEXT:    v_mov_b32_e32 v4, 04575; GFX90A-NEXT:    ;;#ASMSTART4576; GFX90A-NEXT:    ; def v[0:1]4577; GFX90A-NEXT:    ;;#ASMEND4578; GFX90A-NEXT:    ;;#ASMSTART4579; GFX90A-NEXT:    ; def v[2:3]4580; GFX90A-NEXT:    ;;#ASMEND4581; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004582; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s44583; GFX90A-NEXT:    global_store_short v4, v3, s[16:17] offset:44584; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]4585; GFX90A-NEXT:    s_waitcnt vmcnt(0)4586; GFX90A-NEXT:    s_setpc_b64 s[30:31]4587;4588; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_2_5:4589; GFX942:       ; %bb.0:4590; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4591; GFX942-NEXT:    v_mov_b32_e32 v4, 04592; GFX942-NEXT:    ;;#ASMSTART4593; GFX942-NEXT:    ; def v[0:1]4594; GFX942-NEXT:    ;;#ASMEND4595; GFX942-NEXT:    ;;#ASMSTART4596; GFX942-NEXT:    ; def v[2:3]4597; GFX942-NEXT:    ;;#ASMEND4598; GFX942-NEXT:    s_mov_b32 s2, 0x50401004599; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s24600; GFX942-NEXT:    global_store_short v4, v3, s[0:1] offset:44601; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]4602; GFX942-NEXT:    s_waitcnt vmcnt(0)4603; GFX942-NEXT:    s_setpc_b64 s[30:31]4604  %vec0 = call <4 x i16> asm "; def $0", "=v"()4605  %vec1 = call <4 x i16> asm "; def $0", "=v"()4606  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4607  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4608  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 5>4609  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84610  ret void4611}4612 4613define void @v_shuffle_v3i16_v3i16__5_3_5(ptr addrspace(1) inreg %ptr) {4614; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_3_5:4615; GFX900:       ; %bb.0:4616; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4617; GFX900-NEXT:    v_mov_b32_e32 v2, 04618; GFX900-NEXT:    ;;#ASMSTART4619; GFX900-NEXT:    ; def v[0:1]4620; GFX900-NEXT:    ;;#ASMEND4621; GFX900-NEXT:    s_mov_b32 s4, 0x50401004622; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s44623; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44624; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]4625; GFX900-NEXT:    s_waitcnt vmcnt(0)4626; GFX900-NEXT:    s_setpc_b64 s[30:31]4627;4628; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_3_5:4629; GFX90A:       ; %bb.0:4630; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4631; GFX90A-NEXT:    v_mov_b32_e32 v2, 04632; GFX90A-NEXT:    ;;#ASMSTART4633; GFX90A-NEXT:    ; def v[0:1]4634; GFX90A-NEXT:    ;;#ASMEND4635; GFX90A-NEXT:    s_mov_b32 s4, 0x50401004636; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s44637; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44638; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]4639; GFX90A-NEXT:    s_waitcnt vmcnt(0)4640; GFX90A-NEXT:    s_setpc_b64 s[30:31]4641;4642; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_3_5:4643; GFX942:       ; %bb.0:4644; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4645; GFX942-NEXT:    v_mov_b32_e32 v2, 04646; GFX942-NEXT:    ;;#ASMSTART4647; GFX942-NEXT:    ; def v[0:1]4648; GFX942-NEXT:    ;;#ASMEND4649; GFX942-NEXT:    s_mov_b32 s2, 0x50401004650; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s24651; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44652; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]4653; GFX942-NEXT:    s_waitcnt vmcnt(0)4654; GFX942-NEXT:    s_setpc_b64 s[30:31]4655  %vec0 = call <4 x i16> asm "; def $0", "=v"()4656  %vec1 = call <4 x i16> asm "; def $0", "=v"()4657  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4658  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4659  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 5>4660  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84661  ret void4662}4663 4664define void @v_shuffle_v3i16_v3i16__5_4_5(ptr addrspace(1) inreg %ptr) {4665; GFX900-LABEL: v_shuffle_v3i16_v3i16__5_4_5:4666; GFX900:       ; %bb.0:4667; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4668; GFX900-NEXT:    v_mov_b32_e32 v2, 04669; GFX900-NEXT:    ;;#ASMSTART4670; GFX900-NEXT:    ; def v[0:1]4671; GFX900-NEXT:    ;;#ASMEND4672; GFX900-NEXT:    s_mov_b32 s4, 0xffff4673; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v04674; GFX900-NEXT:    global_store_short v2, v1, s[16:17] offset:44675; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]4676; GFX900-NEXT:    s_waitcnt vmcnt(0)4677; GFX900-NEXT:    s_setpc_b64 s[30:31]4678;4679; GFX90A-LABEL: v_shuffle_v3i16_v3i16__5_4_5:4680; GFX90A:       ; %bb.0:4681; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4682; GFX90A-NEXT:    v_mov_b32_e32 v2, 04683; GFX90A-NEXT:    ;;#ASMSTART4684; GFX90A-NEXT:    ; def v[0:1]4685; GFX90A-NEXT:    ;;#ASMEND4686; GFX90A-NEXT:    s_mov_b32 s4, 0xffff4687; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v04688; GFX90A-NEXT:    global_store_short v2, v1, s[16:17] offset:44689; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]4690; GFX90A-NEXT:    s_waitcnt vmcnt(0)4691; GFX90A-NEXT:    s_setpc_b64 s[30:31]4692;4693; GFX942-LABEL: v_shuffle_v3i16_v3i16__5_4_5:4694; GFX942:       ; %bb.0:4695; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4696; GFX942-NEXT:    v_mov_b32_e32 v2, 04697; GFX942-NEXT:    ;;#ASMSTART4698; GFX942-NEXT:    ; def v[0:1]4699; GFX942-NEXT:    ;;#ASMEND4700; GFX942-NEXT:    s_mov_b32 s2, 0xffff4701; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v04702; GFX942-NEXT:    global_store_short v2, v1, s[0:1] offset:44703; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]4704; GFX942-NEXT:    s_waitcnt vmcnt(0)4705; GFX942-NEXT:    s_setpc_b64 s[30:31]4706  %vec0 = call <4 x i16> asm "; def $0", "=v"()4707  %vec1 = call <4 x i16> asm "; def $0", "=v"()4708  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4709  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4710  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 5>4711  store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 84712  ret void4713}4714 4715define void @s_shuffle_v3i16_v3i16__u_u_u() {4716; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_u_u:4717; GFX9:       ; %bb.0:4718; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4719; GFX9-NEXT:    ;;#ASMSTART4720; GFX9-NEXT:    ; use s[8:9]4721; GFX9-NEXT:    ;;#ASMEND4722; GFX9-NEXT:    s_setpc_b64 s[30:31]4723  %vec0 = call <4 x i16> asm "; def $0", "=s"()4724  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4725  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> poison4726  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4727  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4728  ret void4729}4730 4731define void @s_shuffle_v3i16_v3i16__0_u_u() {4732; GFX900-LABEL: s_shuffle_v3i16_v3i16__0_u_u:4733; GFX900:       ; %bb.0:4734; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4735; GFX900-NEXT:    ;;#ASMSTART4736; GFX900-NEXT:    ; def s[8:9]4737; GFX900-NEXT:    ;;#ASMEND4738; GFX900-NEXT:    ;;#ASMSTART4739; GFX900-NEXT:    ; use s[8:9]4740; GFX900-NEXT:    ;;#ASMEND4741; GFX900-NEXT:    s_setpc_b64 s[30:31]4742;4743; GFX90A-LABEL: s_shuffle_v3i16_v3i16__0_u_u:4744; GFX90A:       ; %bb.0:4745; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4746; GFX90A-NEXT:    ;;#ASMSTART4747; GFX90A-NEXT:    ; def s[8:9]4748; GFX90A-NEXT:    ;;#ASMEND4749; GFX90A-NEXT:    ;;#ASMSTART4750; GFX90A-NEXT:    ; use s[8:9]4751; GFX90A-NEXT:    ;;#ASMEND4752; GFX90A-NEXT:    s_setpc_b64 s[30:31]4753;4754; GFX942-LABEL: s_shuffle_v3i16_v3i16__0_u_u:4755; GFX942:       ; %bb.0:4756; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4757; GFX942-NEXT:    ;;#ASMSTART4758; GFX942-NEXT:    ; def s[8:9]4759; GFX942-NEXT:    ;;#ASMEND4760; GFX942-NEXT:    s_nop 04761; GFX942-NEXT:    ;;#ASMSTART4762; GFX942-NEXT:    ; use s[8:9]4763; GFX942-NEXT:    ;;#ASMEND4764; GFX942-NEXT:    s_setpc_b64 s[30:31]4765  %vec0 = call <4 x i16> asm "; def $0", "=s"()4766  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4767  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>4768  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4769  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4770  ret void4771}4772 4773define void @s_shuffle_v3i16_v3i16__1_u_u() {4774; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_u_u:4775; GFX900:       ; %bb.0:4776; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4777; GFX900-NEXT:    ;;#ASMSTART4778; GFX900-NEXT:    ; def s[4:5]4779; GFX900-NEXT:    ;;#ASMEND4780; GFX900-NEXT:    s_lshr_b32 s8, s4, 164781; GFX900-NEXT:    ;;#ASMSTART4782; GFX900-NEXT:    ; use s[8:9]4783; GFX900-NEXT:    ;;#ASMEND4784; GFX900-NEXT:    s_setpc_b64 s[30:31]4785;4786; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_u_u:4787; GFX90A:       ; %bb.0:4788; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4789; GFX90A-NEXT:    ;;#ASMSTART4790; GFX90A-NEXT:    ; def s[4:5]4791; GFX90A-NEXT:    ;;#ASMEND4792; GFX90A-NEXT:    s_lshr_b32 s8, s4, 164793; GFX90A-NEXT:    ;;#ASMSTART4794; GFX90A-NEXT:    ; use s[8:9]4795; GFX90A-NEXT:    ;;#ASMEND4796; GFX90A-NEXT:    s_setpc_b64 s[30:31]4797;4798; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_u_u:4799; GFX942:       ; %bb.0:4800; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4801; GFX942-NEXT:    ;;#ASMSTART4802; GFX942-NEXT:    ; def s[0:1]4803; GFX942-NEXT:    ;;#ASMEND4804; GFX942-NEXT:    s_lshr_b32 s8, s0, 164805; GFX942-NEXT:    ;;#ASMSTART4806; GFX942-NEXT:    ; use s[8:9]4807; GFX942-NEXT:    ;;#ASMEND4808; GFX942-NEXT:    s_setpc_b64 s[30:31]4809  %vec0 = call <4 x i16> asm "; def $0", "=s"()4810  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4811  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>4812  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4813  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4814  ret void4815}4816 4817define void @s_shuffle_v3i16_v3i16__2_u_u() {4818; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_u_u:4819; GFX900:       ; %bb.0:4820; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4821; GFX900-NEXT:    ;;#ASMSTART4822; GFX900-NEXT:    ; def s[4:5]4823; GFX900-NEXT:    ;;#ASMEND4824; GFX900-NEXT:    s_mov_b32 s8, s54825; GFX900-NEXT:    ;;#ASMSTART4826; GFX900-NEXT:    ; use s[8:9]4827; GFX900-NEXT:    ;;#ASMEND4828; GFX900-NEXT:    s_setpc_b64 s[30:31]4829;4830; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_u_u:4831; GFX90A:       ; %bb.0:4832; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4833; GFX90A-NEXT:    ;;#ASMSTART4834; GFX90A-NEXT:    ; def s[4:5]4835; GFX90A-NEXT:    ;;#ASMEND4836; GFX90A-NEXT:    s_mov_b32 s8, s54837; GFX90A-NEXT:    ;;#ASMSTART4838; GFX90A-NEXT:    ; use s[8:9]4839; GFX90A-NEXT:    ;;#ASMEND4840; GFX90A-NEXT:    s_setpc_b64 s[30:31]4841;4842; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_u_u:4843; GFX942:       ; %bb.0:4844; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4845; GFX942-NEXT:    ;;#ASMSTART4846; GFX942-NEXT:    ; def s[0:1]4847; GFX942-NEXT:    ;;#ASMEND4848; GFX942-NEXT:    s_mov_b32 s8, s14849; GFX942-NEXT:    ;;#ASMSTART4850; GFX942-NEXT:    ; use s[8:9]4851; GFX942-NEXT:    ;;#ASMEND4852; GFX942-NEXT:    s_setpc_b64 s[30:31]4853  %vec0 = call <4 x i16> asm "; def $0", "=s"()4854  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4855  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>4856  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4857  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4858  ret void4859}4860 4861define void @s_shuffle_v3i16_v3i16__3_u_u() {4862; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_u_u:4863; GFX9:       ; %bb.0:4864; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4865; GFX9-NEXT:    ;;#ASMSTART4866; GFX9-NEXT:    ; use s[8:9]4867; GFX9-NEXT:    ;;#ASMEND4868; GFX9-NEXT:    s_setpc_b64 s[30:31]4869  %vec0 = call <4 x i16> asm "; def $0", "=s"()4870  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4871  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 poison, i32 poison>4872  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4873  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4874  ret void4875}4876 4877define void @s_shuffle_v3i16_v3i16__4_u_u() {4878; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_u_u:4879; GFX900:       ; %bb.0:4880; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4881; GFX900-NEXT:    ;;#ASMSTART4882; GFX900-NEXT:    ; def s[4:5]4883; GFX900-NEXT:    ;;#ASMEND4884; GFX900-NEXT:    s_lshr_b32 s8, s4, 164885; GFX900-NEXT:    ;;#ASMSTART4886; GFX900-NEXT:    ; use s[8:9]4887; GFX900-NEXT:    ;;#ASMEND4888; GFX900-NEXT:    s_setpc_b64 s[30:31]4889;4890; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_u_u:4891; GFX90A:       ; %bb.0:4892; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4893; GFX90A-NEXT:    ;;#ASMSTART4894; GFX90A-NEXT:    ; def s[4:5]4895; GFX90A-NEXT:    ;;#ASMEND4896; GFX90A-NEXT:    s_lshr_b32 s8, s4, 164897; GFX90A-NEXT:    ;;#ASMSTART4898; GFX90A-NEXT:    ; use s[8:9]4899; GFX90A-NEXT:    ;;#ASMEND4900; GFX90A-NEXT:    s_setpc_b64 s[30:31]4901;4902; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_u_u:4903; GFX942:       ; %bb.0:4904; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4905; GFX942-NEXT:    ;;#ASMSTART4906; GFX942-NEXT:    ; def s[0:1]4907; GFX942-NEXT:    ;;#ASMEND4908; GFX942-NEXT:    s_lshr_b32 s8, s0, 164909; GFX942-NEXT:    ;;#ASMSTART4910; GFX942-NEXT:    ; use s[8:9]4911; GFX942-NEXT:    ;;#ASMEND4912; GFX942-NEXT:    s_setpc_b64 s[30:31]4913  %vec0 = call <4 x i16> asm "; def $0", "=s"()4914  %vec1 = call <4 x i16> asm "; def $0", "=s"()4915  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4916  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4917  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 poison, i32 poison>4918  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4919  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4920  ret void4921}4922 4923define void @s_shuffle_v3i16_v3i16__5_u_u() {4924; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_u:4925; GFX900:       ; %bb.0:4926; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4927; GFX900-NEXT:    ;;#ASMSTART4928; GFX900-NEXT:    ; def s[4:5]4929; GFX900-NEXT:    ;;#ASMEND4930; GFX900-NEXT:    s_mov_b32 s8, s54931; GFX900-NEXT:    ;;#ASMSTART4932; GFX900-NEXT:    ; use s[8:9]4933; GFX900-NEXT:    ;;#ASMEND4934; GFX900-NEXT:    s_setpc_b64 s[30:31]4935;4936; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_u:4937; GFX90A:       ; %bb.0:4938; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4939; GFX90A-NEXT:    ;;#ASMSTART4940; GFX90A-NEXT:    ; def s[4:5]4941; GFX90A-NEXT:    ;;#ASMEND4942; GFX90A-NEXT:    s_mov_b32 s8, s54943; GFX90A-NEXT:    ;;#ASMSTART4944; GFX90A-NEXT:    ; use s[8:9]4945; GFX90A-NEXT:    ;;#ASMEND4946; GFX90A-NEXT:    s_setpc_b64 s[30:31]4947;4948; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_u:4949; GFX942:       ; %bb.0:4950; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4951; GFX942-NEXT:    ;;#ASMSTART4952; GFX942-NEXT:    ; def s[0:1]4953; GFX942-NEXT:    ;;#ASMEND4954; GFX942-NEXT:    s_mov_b32 s8, s14955; GFX942-NEXT:    ;;#ASMSTART4956; GFX942-NEXT:    ; use s[8:9]4957; GFX942-NEXT:    ;;#ASMEND4958; GFX942-NEXT:    s_setpc_b64 s[30:31]4959  %vec0 = call <4 x i16> asm "; def $0", "=s"()4960  %vec1 = call <4 x i16> asm "; def $0", "=s"()4961  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4962  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4963  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 poison>4964  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4965  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)4966  ret void4967}4968 4969define void @s_shuffle_v3i16_v3i16__5_0_u() {4970; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_u:4971; GFX900:       ; %bb.0:4972; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4973; GFX900-NEXT:    ;;#ASMSTART4974; GFX900-NEXT:    ; def s[4:5]4975; GFX900-NEXT:    ;;#ASMEND4976; GFX900-NEXT:    ;;#ASMSTART4977; GFX900-NEXT:    ; def s[6:7]4978; GFX900-NEXT:    ;;#ASMEND4979; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s44980; GFX900-NEXT:    ;;#ASMSTART4981; GFX900-NEXT:    ; use s[8:9]4982; GFX900-NEXT:    ;;#ASMEND4983; GFX900-NEXT:    s_setpc_b64 s[30:31]4984;4985; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_u:4986; GFX90A:       ; %bb.0:4987; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4988; GFX90A-NEXT:    ;;#ASMSTART4989; GFX90A-NEXT:    ; def s[4:5]4990; GFX90A-NEXT:    ;;#ASMEND4991; GFX90A-NEXT:    ;;#ASMSTART4992; GFX90A-NEXT:    ; def s[6:7]4993; GFX90A-NEXT:    ;;#ASMEND4994; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s44995; GFX90A-NEXT:    ;;#ASMSTART4996; GFX90A-NEXT:    ; use s[8:9]4997; GFX90A-NEXT:    ;;#ASMEND4998; GFX90A-NEXT:    s_setpc_b64 s[30:31]4999;5000; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_u:5001; GFX942:       ; %bb.0:5002; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5003; GFX942-NEXT:    ;;#ASMSTART5004; GFX942-NEXT:    ; def s[0:1]5005; GFX942-NEXT:    ;;#ASMEND5006; GFX942-NEXT:    ;;#ASMSTART5007; GFX942-NEXT:    ; def s[2:3]5008; GFX942-NEXT:    ;;#ASMEND5009; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s05010; GFX942-NEXT:    ;;#ASMSTART5011; GFX942-NEXT:    ; use s[8:9]5012; GFX942-NEXT:    ;;#ASMEND5013; GFX942-NEXT:    s_setpc_b64 s[30:31]5014  %vec0 = call <4 x i16> asm "; def $0", "=s"()5015  %vec1 = call <4 x i16> asm "; def $0", "=s"()5016  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5017  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5018  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 poison>5019  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5020  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5021  ret void5022}5023 5024define void @s_shuffle_v3i16_v3i16__5_1_u() {5025; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_u:5026; GFX900:       ; %bb.0:5027; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5028; GFX900-NEXT:    ;;#ASMSTART5029; GFX900-NEXT:    ; def s[4:5]5030; GFX900-NEXT:    ;;#ASMEND5031; GFX900-NEXT:    ;;#ASMSTART5032; GFX900-NEXT:    ; def s[6:7]5033; GFX900-NEXT:    ;;#ASMEND5034; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s45035; GFX900-NEXT:    ;;#ASMSTART5036; GFX900-NEXT:    ; use s[8:9]5037; GFX900-NEXT:    ;;#ASMEND5038; GFX900-NEXT:    s_setpc_b64 s[30:31]5039;5040; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_u:5041; GFX90A:       ; %bb.0:5042; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5043; GFX90A-NEXT:    ;;#ASMSTART5044; GFX90A-NEXT:    ; def s[4:5]5045; GFX90A-NEXT:    ;;#ASMEND5046; GFX90A-NEXT:    ;;#ASMSTART5047; GFX90A-NEXT:    ; def s[6:7]5048; GFX90A-NEXT:    ;;#ASMEND5049; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s45050; GFX90A-NEXT:    ;;#ASMSTART5051; GFX90A-NEXT:    ; use s[8:9]5052; GFX90A-NEXT:    ;;#ASMEND5053; GFX90A-NEXT:    s_setpc_b64 s[30:31]5054;5055; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_u:5056; GFX942:       ; %bb.0:5057; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5058; GFX942-NEXT:    ;;#ASMSTART5059; GFX942-NEXT:    ; def s[0:1]5060; GFX942-NEXT:    ;;#ASMEND5061; GFX942-NEXT:    ;;#ASMSTART5062; GFX942-NEXT:    ; def s[2:3]5063; GFX942-NEXT:    ;;#ASMEND5064; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s05065; GFX942-NEXT:    ;;#ASMSTART5066; GFX942-NEXT:    ; use s[8:9]5067; GFX942-NEXT:    ;;#ASMEND5068; GFX942-NEXT:    s_setpc_b64 s[30:31]5069  %vec0 = call <4 x i16> asm "; def $0", "=s"()5070  %vec1 = call <4 x i16> asm "; def $0", "=s"()5071  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5072  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5073  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 poison>5074  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5075  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5076  ret void5077}5078 5079define void @s_shuffle_v3i16_v3i16__5_2_u() {5080; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_u:5081; GFX900:       ; %bb.0:5082; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5083; GFX900-NEXT:    ;;#ASMSTART5084; GFX900-NEXT:    ; def s[4:5]5085; GFX900-NEXT:    ;;#ASMEND5086; GFX900-NEXT:    ;;#ASMSTART5087; GFX900-NEXT:    ; def s[6:7]5088; GFX900-NEXT:    ;;#ASMEND5089; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s55090; GFX900-NEXT:    ;;#ASMSTART5091; GFX900-NEXT:    ; use s[8:9]5092; GFX900-NEXT:    ;;#ASMEND5093; GFX900-NEXT:    s_setpc_b64 s[30:31]5094;5095; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_u:5096; GFX90A:       ; %bb.0:5097; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5098; GFX90A-NEXT:    ;;#ASMSTART5099; GFX90A-NEXT:    ; def s[4:5]5100; GFX90A-NEXT:    ;;#ASMEND5101; GFX90A-NEXT:    ;;#ASMSTART5102; GFX90A-NEXT:    ; def s[6:7]5103; GFX90A-NEXT:    ;;#ASMEND5104; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s55105; GFX90A-NEXT:    ;;#ASMSTART5106; GFX90A-NEXT:    ; use s[8:9]5107; GFX90A-NEXT:    ;;#ASMEND5108; GFX90A-NEXT:    s_setpc_b64 s[30:31]5109;5110; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_u:5111; GFX942:       ; %bb.0:5112; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5113; GFX942-NEXT:    ;;#ASMSTART5114; GFX942-NEXT:    ; def s[0:1]5115; GFX942-NEXT:    ;;#ASMEND5116; GFX942-NEXT:    ;;#ASMSTART5117; GFX942-NEXT:    ; def s[2:3]5118; GFX942-NEXT:    ;;#ASMEND5119; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s15120; GFX942-NEXT:    ;;#ASMSTART5121; GFX942-NEXT:    ; use s[8:9]5122; GFX942-NEXT:    ;;#ASMEND5123; GFX942-NEXT:    s_setpc_b64 s[30:31]5124  %vec0 = call <4 x i16> asm "; def $0", "=s"()5125  %vec1 = call <4 x i16> asm "; def $0", "=s"()5126  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5127  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5128  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 poison>5129  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5130  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5131  ret void5132}5133 5134define void @s_shuffle_v3i16_v3i16__5_3_u() {5135; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_u:5136; GFX900:       ; %bb.0:5137; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5138; GFX900-NEXT:    ;;#ASMSTART5139; GFX900-NEXT:    ; def s[4:5]5140; GFX900-NEXT:    ;;#ASMEND5141; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45142; GFX900-NEXT:    ;;#ASMSTART5143; GFX900-NEXT:    ; use s[8:9]5144; GFX900-NEXT:    ;;#ASMEND5145; GFX900-NEXT:    s_setpc_b64 s[30:31]5146;5147; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_u:5148; GFX90A:       ; %bb.0:5149; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5150; GFX90A-NEXT:    ;;#ASMSTART5151; GFX90A-NEXT:    ; def s[4:5]5152; GFX90A-NEXT:    ;;#ASMEND5153; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45154; GFX90A-NEXT:    ;;#ASMSTART5155; GFX90A-NEXT:    ; use s[8:9]5156; GFX90A-NEXT:    ;;#ASMEND5157; GFX90A-NEXT:    s_setpc_b64 s[30:31]5158;5159; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_u:5160; GFX942:       ; %bb.0:5161; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5162; GFX942-NEXT:    ;;#ASMSTART5163; GFX942-NEXT:    ; def s[0:1]5164; GFX942-NEXT:    ;;#ASMEND5165; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05166; GFX942-NEXT:    ;;#ASMSTART5167; GFX942-NEXT:    ; use s[8:9]5168; GFX942-NEXT:    ;;#ASMEND5169; GFX942-NEXT:    s_setpc_b64 s[30:31]5170  %vec0 = call <4 x i16> asm "; def $0", "=s"()5171  %vec1 = call <4 x i16> asm "; def $0", "=s"()5172  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5173  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5174  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 poison>5175  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5176  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5177  ret void5178}5179 5180define void @s_shuffle_v3i16_v3i16__5_4_u() {5181; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_u:5182; GFX900:       ; %bb.0:5183; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5184; GFX900-NEXT:    ;;#ASMSTART5185; GFX900-NEXT:    ; def s[4:5]5186; GFX900-NEXT:    ;;#ASMEND5187; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s45188; GFX900-NEXT:    ;;#ASMSTART5189; GFX900-NEXT:    ; use s[8:9]5190; GFX900-NEXT:    ;;#ASMEND5191; GFX900-NEXT:    s_setpc_b64 s[30:31]5192;5193; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_u:5194; GFX90A:       ; %bb.0:5195; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5196; GFX90A-NEXT:    ;;#ASMSTART5197; GFX90A-NEXT:    ; def s[4:5]5198; GFX90A-NEXT:    ;;#ASMEND5199; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s45200; GFX90A-NEXT:    ;;#ASMSTART5201; GFX90A-NEXT:    ; use s[8:9]5202; GFX90A-NEXT:    ;;#ASMEND5203; GFX90A-NEXT:    s_setpc_b64 s[30:31]5204;5205; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_u:5206; GFX942:       ; %bb.0:5207; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5208; GFX942-NEXT:    ;;#ASMSTART5209; GFX942-NEXT:    ; def s[0:1]5210; GFX942-NEXT:    ;;#ASMEND5211; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s05212; GFX942-NEXT:    ;;#ASMSTART5213; GFX942-NEXT:    ; use s[8:9]5214; GFX942-NEXT:    ;;#ASMEND5215; GFX942-NEXT:    s_setpc_b64 s[30:31]5216  %vec0 = call <4 x i16> asm "; def $0", "=s"()5217  %vec1 = call <4 x i16> asm "; def $0", "=s"()5218  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5219  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5220  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 poison>5221  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5222  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5223  ret void5224}5225 5226define void @s_shuffle_v3i16_v3i16__5_5_u() {5227; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_u:5228; GFX900:       ; %bb.0:5229; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5230; GFX900-NEXT:    ;;#ASMSTART5231; GFX900-NEXT:    ; def s[4:5]5232; GFX900-NEXT:    ;;#ASMEND5233; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s55234; GFX900-NEXT:    ;;#ASMSTART5235; GFX900-NEXT:    ; use s[8:9]5236; GFX900-NEXT:    ;;#ASMEND5237; GFX900-NEXT:    s_setpc_b64 s[30:31]5238;5239; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_u:5240; GFX90A:       ; %bb.0:5241; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5242; GFX90A-NEXT:    ;;#ASMSTART5243; GFX90A-NEXT:    ; def s[4:5]5244; GFX90A-NEXT:    ;;#ASMEND5245; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s55246; GFX90A-NEXT:    ;;#ASMSTART5247; GFX90A-NEXT:    ; use s[8:9]5248; GFX90A-NEXT:    ;;#ASMEND5249; GFX90A-NEXT:    s_setpc_b64 s[30:31]5250;5251; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_u:5252; GFX942:       ; %bb.0:5253; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5254; GFX942-NEXT:    ;;#ASMSTART5255; GFX942-NEXT:    ; def s[0:1]5256; GFX942-NEXT:    ;;#ASMEND5257; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s15258; GFX942-NEXT:    ;;#ASMSTART5259; GFX942-NEXT:    ; use s[8:9]5260; GFX942-NEXT:    ;;#ASMEND5261; GFX942-NEXT:    s_setpc_b64 s[30:31]5262  %vec0 = call <4 x i16> asm "; def $0", "=s"()5263  %vec1 = call <4 x i16> asm "; def $0", "=s"()5264  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5265  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5266  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 poison>5267  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5268  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5269  ret void5270}5271 5272define void @s_shuffle_v3i16_v3i16__5_5_0() {5273; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_0:5274; GFX900:       ; %bb.0:5275; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5276; GFX900-NEXT:    ;;#ASMSTART5277; GFX900-NEXT:    ; def s[4:5]5278; GFX900-NEXT:    ;;#ASMEND5279; GFX900-NEXT:    ;;#ASMSTART5280; GFX900-NEXT:    ; def s[6:7]5281; GFX900-NEXT:    ;;#ASMEND5282; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s75283; GFX900-NEXT:    s_mov_b32 s9, s45284; GFX900-NEXT:    ;;#ASMSTART5285; GFX900-NEXT:    ; use s[8:9]5286; GFX900-NEXT:    ;;#ASMEND5287; GFX900-NEXT:    s_setpc_b64 s[30:31]5288;5289; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_0:5290; GFX90A:       ; %bb.0:5291; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5292; GFX90A-NEXT:    ;;#ASMSTART5293; GFX90A-NEXT:    ; def s[4:5]5294; GFX90A-NEXT:    ;;#ASMEND5295; GFX90A-NEXT:    ;;#ASMSTART5296; GFX90A-NEXT:    ; def s[6:7]5297; GFX90A-NEXT:    ;;#ASMEND5298; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s75299; GFX90A-NEXT:    s_mov_b32 s9, s45300; GFX90A-NEXT:    ;;#ASMSTART5301; GFX90A-NEXT:    ; use s[8:9]5302; GFX90A-NEXT:    ;;#ASMEND5303; GFX90A-NEXT:    s_setpc_b64 s[30:31]5304;5305; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_0:5306; GFX942:       ; %bb.0:5307; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5308; GFX942-NEXT:    ;;#ASMSTART5309; GFX942-NEXT:    ; def s[0:1]5310; GFX942-NEXT:    ;;#ASMEND5311; GFX942-NEXT:    ;;#ASMSTART5312; GFX942-NEXT:    ; def s[2:3]5313; GFX942-NEXT:    ;;#ASMEND5314; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s35315; GFX942-NEXT:    s_mov_b32 s9, s05316; GFX942-NEXT:    ;;#ASMSTART5317; GFX942-NEXT:    ; use s[8:9]5318; GFX942-NEXT:    ;;#ASMEND5319; GFX942-NEXT:    s_setpc_b64 s[30:31]5320  %vec0 = call <4 x i16> asm "; def $0", "=s"()5321  %vec1 = call <4 x i16> asm "; def $0", "=s"()5322  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5323  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5324  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 0>5325  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5326  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5327  ret void5328}5329 5330define void @s_shuffle_v3i16_v3i16__5_5_1() {5331; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_1:5332; GFX900:       ; %bb.0:5333; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5334; GFX900-NEXT:    ;;#ASMSTART5335; GFX900-NEXT:    ; def s[4:5]5336; GFX900-NEXT:    ;;#ASMEND5337; GFX900-NEXT:    ;;#ASMSTART5338; GFX900-NEXT:    ; def s[6:7]5339; GFX900-NEXT:    ;;#ASMEND5340; GFX900-NEXT:    s_lshr_b32 s9, s4, 165341; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s75342; GFX900-NEXT:    ;;#ASMSTART5343; GFX900-NEXT:    ; use s[8:9]5344; GFX900-NEXT:    ;;#ASMEND5345; GFX900-NEXT:    s_setpc_b64 s[30:31]5346;5347; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_1:5348; GFX90A:       ; %bb.0:5349; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5350; GFX90A-NEXT:    ;;#ASMSTART5351; GFX90A-NEXT:    ; def s[4:5]5352; GFX90A-NEXT:    ;;#ASMEND5353; GFX90A-NEXT:    ;;#ASMSTART5354; GFX90A-NEXT:    ; def s[6:7]5355; GFX90A-NEXT:    ;;#ASMEND5356; GFX90A-NEXT:    s_lshr_b32 s9, s4, 165357; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s75358; GFX90A-NEXT:    ;;#ASMSTART5359; GFX90A-NEXT:    ; use s[8:9]5360; GFX90A-NEXT:    ;;#ASMEND5361; GFX90A-NEXT:    s_setpc_b64 s[30:31]5362;5363; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_1:5364; GFX942:       ; %bb.0:5365; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5366; GFX942-NEXT:    ;;#ASMSTART5367; GFX942-NEXT:    ; def s[0:1]5368; GFX942-NEXT:    ;;#ASMEND5369; GFX942-NEXT:    ;;#ASMSTART5370; GFX942-NEXT:    ; def s[2:3]5371; GFX942-NEXT:    ;;#ASMEND5372; GFX942-NEXT:    s_lshr_b32 s9, s0, 165373; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s35374; GFX942-NEXT:    ;;#ASMSTART5375; GFX942-NEXT:    ; use s[8:9]5376; GFX942-NEXT:    ;;#ASMEND5377; GFX942-NEXT:    s_setpc_b64 s[30:31]5378  %vec0 = call <4 x i16> asm "; def $0", "=s"()5379  %vec1 = call <4 x i16> asm "; def $0", "=s"()5380  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5381  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5382  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 1>5383  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5384  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5385  ret void5386}5387 5388define void @s_shuffle_v3i16_v3i16__5_5_2() {5389; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_2:5390; GFX900:       ; %bb.0:5391; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5392; GFX900-NEXT:    ;;#ASMSTART5393; GFX900-NEXT:    ; def s[8:9]5394; GFX900-NEXT:    ;;#ASMEND5395; GFX900-NEXT:    ;;#ASMSTART5396; GFX900-NEXT:    ; def s[4:5]5397; GFX900-NEXT:    ;;#ASMEND5398; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s55399; GFX900-NEXT:    ;;#ASMSTART5400; GFX900-NEXT:    ; use s[8:9]5401; GFX900-NEXT:    ;;#ASMEND5402; GFX900-NEXT:    s_setpc_b64 s[30:31]5403;5404; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_2:5405; GFX90A:       ; %bb.0:5406; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5407; GFX90A-NEXT:    ;;#ASMSTART5408; GFX90A-NEXT:    ; def s[8:9]5409; GFX90A-NEXT:    ;;#ASMEND5410; GFX90A-NEXT:    ;;#ASMSTART5411; GFX90A-NEXT:    ; def s[4:5]5412; GFX90A-NEXT:    ;;#ASMEND5413; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s55414; GFX90A-NEXT:    ;;#ASMSTART5415; GFX90A-NEXT:    ; use s[8:9]5416; GFX90A-NEXT:    ;;#ASMEND5417; GFX90A-NEXT:    s_setpc_b64 s[30:31]5418;5419; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_2:5420; GFX942:       ; %bb.0:5421; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5422; GFX942-NEXT:    ;;#ASMSTART5423; GFX942-NEXT:    ; def s[8:9]5424; GFX942-NEXT:    ;;#ASMEND5425; GFX942-NEXT:    ;;#ASMSTART5426; GFX942-NEXT:    ; def s[0:1]5427; GFX942-NEXT:    ;;#ASMEND5428; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s15429; GFX942-NEXT:    ;;#ASMSTART5430; GFX942-NEXT:    ; use s[8:9]5431; GFX942-NEXT:    ;;#ASMEND5432; GFX942-NEXT:    s_setpc_b64 s[30:31]5433  %vec0 = call <4 x i16> asm "; def $0", "=s"()5434  %vec1 = call <4 x i16> asm "; def $0", "=s"()5435  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5436  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5437  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 2>5438  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5439  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5440  ret void5441}5442 5443define void @s_shuffle_v3i16_v3i16__5_5_3() {5444; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_3:5445; GFX900:       ; %bb.0:5446; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5447; GFX900-NEXT:    ;;#ASMSTART5448; GFX900-NEXT:    ; def s[4:5]5449; GFX900-NEXT:    ;;#ASMEND5450; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s55451; GFX900-NEXT:    s_mov_b32 s9, s45452; GFX900-NEXT:    ;;#ASMSTART5453; GFX900-NEXT:    ; use s[8:9]5454; GFX900-NEXT:    ;;#ASMEND5455; GFX900-NEXT:    s_setpc_b64 s[30:31]5456;5457; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_3:5458; GFX90A:       ; %bb.0:5459; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5460; GFX90A-NEXT:    ;;#ASMSTART5461; GFX90A-NEXT:    ; def s[4:5]5462; GFX90A-NEXT:    ;;#ASMEND5463; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s55464; GFX90A-NEXT:    s_mov_b32 s9, s45465; GFX90A-NEXT:    ;;#ASMSTART5466; GFX90A-NEXT:    ; use s[8:9]5467; GFX90A-NEXT:    ;;#ASMEND5468; GFX90A-NEXT:    s_setpc_b64 s[30:31]5469;5470; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_3:5471; GFX942:       ; %bb.0:5472; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5473; GFX942-NEXT:    ;;#ASMSTART5474; GFX942-NEXT:    ; def s[0:1]5475; GFX942-NEXT:    ;;#ASMEND5476; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s15477; GFX942-NEXT:    s_mov_b32 s9, s05478; GFX942-NEXT:    ;;#ASMSTART5479; GFX942-NEXT:    ; use s[8:9]5480; GFX942-NEXT:    ;;#ASMEND5481; GFX942-NEXT:    s_setpc_b64 s[30:31]5482  %vec0 = call <4 x i16> asm "; def $0", "=s"()5483  %vec1 = call <4 x i16> asm "; def $0", "=s"()5484  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5485  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5486  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 3>5487  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5488  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5489  ret void5490}5491 5492define void @s_shuffle_v3i16_v3i16__5_5_4() {5493; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_5_4:5494; GFX900:       ; %bb.0:5495; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5496; GFX900-NEXT:    ;;#ASMSTART5497; GFX900-NEXT:    ; def s[4:5]5498; GFX900-NEXT:    ;;#ASMEND5499; GFX900-NEXT:    s_lshr_b32 s9, s4, 165500; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s55501; GFX900-NEXT:    ;;#ASMSTART5502; GFX900-NEXT:    ; use s[8:9]5503; GFX900-NEXT:    ;;#ASMEND5504; GFX900-NEXT:    s_setpc_b64 s[30:31]5505;5506; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_5_4:5507; GFX90A:       ; %bb.0:5508; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5509; GFX90A-NEXT:    ;;#ASMSTART5510; GFX90A-NEXT:    ; def s[4:5]5511; GFX90A-NEXT:    ;;#ASMEND5512; GFX90A-NEXT:    s_lshr_b32 s9, s4, 165513; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s55514; GFX90A-NEXT:    ;;#ASMSTART5515; GFX90A-NEXT:    ; use s[8:9]5516; GFX90A-NEXT:    ;;#ASMEND5517; GFX90A-NEXT:    s_setpc_b64 s[30:31]5518;5519; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_5_4:5520; GFX942:       ; %bb.0:5521; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5522; GFX942-NEXT:    ;;#ASMSTART5523; GFX942-NEXT:    ; def s[0:1]5524; GFX942-NEXT:    ;;#ASMEND5525; GFX942-NEXT:    s_lshr_b32 s9, s0, 165526; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s15527; GFX942-NEXT:    ;;#ASMSTART5528; GFX942-NEXT:    ; use s[8:9]5529; GFX942-NEXT:    ;;#ASMEND5530; GFX942-NEXT:    s_setpc_b64 s[30:31]5531  %vec0 = call <4 x i16> asm "; def $0", "=s"()5532  %vec1 = call <4 x i16> asm "; def $0", "=s"()5533  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5534  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5535  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 4>5536  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5537  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5538  ret void5539}5540 5541define void @s_shuffle_v3i16_v3i16__5_5_5() {5542; GFX9-LABEL: s_shuffle_v3i16_v3i16__5_5_5:5543; GFX9:       ; %bb.0:5544; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5545; GFX9-NEXT:    ;;#ASMSTART5546; GFX9-NEXT:    ; def s[8:9]5547; GFX9-NEXT:    ;;#ASMEND5548; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s95549; GFX9-NEXT:    ;;#ASMSTART5550; GFX9-NEXT:    ; use s[8:9]5551; GFX9-NEXT:    ;;#ASMEND5552; GFX9-NEXT:    s_setpc_b64 s[30:31]5553  %vec0 = call <4 x i16> asm "; def $0", "=s"()5554  %vec1 = call <4 x i16> asm "; def $0", "=s"()5555  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5556  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5557  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 5, i32 5>5558  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5559  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5560  ret void5561}5562 5563define void @s_shuffle_v3i16_v3i16__u_0_0() {5564; GFX900-LABEL: s_shuffle_v3i16_v3i16__u_0_0:5565; GFX900:       ; %bb.0:5566; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5567; GFX900-NEXT:    ;;#ASMSTART5568; GFX900-NEXT:    ; def s[4:5]5569; GFX900-NEXT:    ;;#ASMEND5570; GFX900-NEXT:    s_lshl_b32 s8, s4, 165571; GFX900-NEXT:    s_mov_b32 s9, s45572; GFX900-NEXT:    ;;#ASMSTART5573; GFX900-NEXT:    ; use s[8:9]5574; GFX900-NEXT:    ;;#ASMEND5575; GFX900-NEXT:    s_setpc_b64 s[30:31]5576;5577; GFX90A-LABEL: s_shuffle_v3i16_v3i16__u_0_0:5578; GFX90A:       ; %bb.0:5579; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5580; GFX90A-NEXT:    ;;#ASMSTART5581; GFX90A-NEXT:    ; def s[4:5]5582; GFX90A-NEXT:    ;;#ASMEND5583; GFX90A-NEXT:    s_lshl_b32 s8, s4, 165584; GFX90A-NEXT:    s_mov_b32 s9, s45585; GFX90A-NEXT:    ;;#ASMSTART5586; GFX90A-NEXT:    ; use s[8:9]5587; GFX90A-NEXT:    ;;#ASMEND5588; GFX90A-NEXT:    s_setpc_b64 s[30:31]5589;5590; GFX942-LABEL: s_shuffle_v3i16_v3i16__u_0_0:5591; GFX942:       ; %bb.0:5592; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5593; GFX942-NEXT:    ;;#ASMSTART5594; GFX942-NEXT:    ; def s[0:1]5595; GFX942-NEXT:    ;;#ASMEND5596; GFX942-NEXT:    s_lshl_b32 s8, s0, 165597; GFX942-NEXT:    s_mov_b32 s9, s05598; GFX942-NEXT:    ;;#ASMSTART5599; GFX942-NEXT:    ; use s[8:9]5600; GFX942-NEXT:    ;;#ASMEND5601; GFX942-NEXT:    s_setpc_b64 s[30:31]5602  %vec0 = call <4 x i16> asm "; def $0", "=s"()5603  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5604  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>5605  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5606  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5607  ret void5608}5609 5610define void @s_shuffle_v3i16_v3i16__0_0_0() {5611; GFX900-LABEL: s_shuffle_v3i16_v3i16__0_0_0:5612; GFX900:       ; %bb.0:5613; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5614; GFX900-NEXT:    ;;#ASMSTART5615; GFX900-NEXT:    ; def s[4:5]5616; GFX900-NEXT:    ;;#ASMEND5617; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s45618; GFX900-NEXT:    s_mov_b32 s9, s45619; GFX900-NEXT:    ;;#ASMSTART5620; GFX900-NEXT:    ; use s[8:9]5621; GFX900-NEXT:    ;;#ASMEND5622; GFX900-NEXT:    s_setpc_b64 s[30:31]5623;5624; GFX90A-LABEL: s_shuffle_v3i16_v3i16__0_0_0:5625; GFX90A:       ; %bb.0:5626; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5627; GFX90A-NEXT:    ;;#ASMSTART5628; GFX90A-NEXT:    ; def s[4:5]5629; GFX90A-NEXT:    ;;#ASMEND5630; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s45631; GFX90A-NEXT:    s_mov_b32 s9, s45632; GFX90A-NEXT:    ;;#ASMSTART5633; GFX90A-NEXT:    ; use s[8:9]5634; GFX90A-NEXT:    ;;#ASMEND5635; GFX90A-NEXT:    s_setpc_b64 s[30:31]5636;5637; GFX942-LABEL: s_shuffle_v3i16_v3i16__0_0_0:5638; GFX942:       ; %bb.0:5639; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5640; GFX942-NEXT:    ;;#ASMSTART5641; GFX942-NEXT:    ; def s[0:1]5642; GFX942-NEXT:    ;;#ASMEND5643; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s05644; GFX942-NEXT:    s_mov_b32 s9, s05645; GFX942-NEXT:    ;;#ASMSTART5646; GFX942-NEXT:    ; use s[8:9]5647; GFX942-NEXT:    ;;#ASMEND5648; GFX942-NEXT:    s_setpc_b64 s[30:31]5649  %vec0 = call <4 x i16> asm "; def $0", "=s"()5650  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5651  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> zeroinitializer5652  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5653  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5654  ret void5655}5656 5657define void @s_shuffle_v3i16_v3i16__1_0_0() {5658; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_0_0:5659; GFX900:       ; %bb.0:5660; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5661; GFX900-NEXT:    ;;#ASMSTART5662; GFX900-NEXT:    ; def s[4:5]5663; GFX900-NEXT:    ;;#ASMEND5664; GFX900-NEXT:    s_lshr_b32 s5, s4, 165665; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45666; GFX900-NEXT:    s_mov_b32 s9, s45667; GFX900-NEXT:    ;;#ASMSTART5668; GFX900-NEXT:    ; use s[8:9]5669; GFX900-NEXT:    ;;#ASMEND5670; GFX900-NEXT:    s_setpc_b64 s[30:31]5671;5672; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_0_0:5673; GFX90A:       ; %bb.0:5674; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5675; GFX90A-NEXT:    ;;#ASMSTART5676; GFX90A-NEXT:    ; def s[4:5]5677; GFX90A-NEXT:    ;;#ASMEND5678; GFX90A-NEXT:    s_lshr_b32 s5, s4, 165679; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45680; GFX90A-NEXT:    s_mov_b32 s9, s45681; GFX90A-NEXT:    ;;#ASMSTART5682; GFX90A-NEXT:    ; use s[8:9]5683; GFX90A-NEXT:    ;;#ASMEND5684; GFX90A-NEXT:    s_setpc_b64 s[30:31]5685;5686; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_0_0:5687; GFX942:       ; %bb.0:5688; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5689; GFX942-NEXT:    ;;#ASMSTART5690; GFX942-NEXT:    ; def s[0:1]5691; GFX942-NEXT:    ;;#ASMEND5692; GFX942-NEXT:    s_lshr_b32 s1, s0, 165693; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05694; GFX942-NEXT:    s_mov_b32 s9, s05695; GFX942-NEXT:    ;;#ASMSTART5696; GFX942-NEXT:    ; use s[8:9]5697; GFX942-NEXT:    ;;#ASMEND5698; GFX942-NEXT:    s_setpc_b64 s[30:31]5699  %vec0 = call <4 x i16> asm "; def $0", "=s"()5700  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5701  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>5702  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5703  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5704  ret void5705}5706 5707define void @s_shuffle_v3i16_v3i16__2_0_0() {5708; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_0_0:5709; GFX900:       ; %bb.0:5710; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5711; GFX900-NEXT:    ;;#ASMSTART5712; GFX900-NEXT:    ; def s[4:5]5713; GFX900-NEXT:    ;;#ASMEND5714; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45715; GFX900-NEXT:    s_mov_b32 s9, s45716; GFX900-NEXT:    ;;#ASMSTART5717; GFX900-NEXT:    ; use s[8:9]5718; GFX900-NEXT:    ;;#ASMEND5719; GFX900-NEXT:    s_setpc_b64 s[30:31]5720;5721; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_0_0:5722; GFX90A:       ; %bb.0:5723; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5724; GFX90A-NEXT:    ;;#ASMSTART5725; GFX90A-NEXT:    ; def s[4:5]5726; GFX90A-NEXT:    ;;#ASMEND5727; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45728; GFX90A-NEXT:    s_mov_b32 s9, s45729; GFX90A-NEXT:    ;;#ASMSTART5730; GFX90A-NEXT:    ; use s[8:9]5731; GFX90A-NEXT:    ;;#ASMEND5732; GFX90A-NEXT:    s_setpc_b64 s[30:31]5733;5734; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_0_0:5735; GFX942:       ; %bb.0:5736; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5737; GFX942-NEXT:    ;;#ASMSTART5738; GFX942-NEXT:    ; def s[0:1]5739; GFX942-NEXT:    ;;#ASMEND5740; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05741; GFX942-NEXT:    s_mov_b32 s9, s05742; GFX942-NEXT:    ;;#ASMSTART5743; GFX942-NEXT:    ; use s[8:9]5744; GFX942-NEXT:    ;;#ASMEND5745; GFX942-NEXT:    s_setpc_b64 s[30:31]5746  %vec0 = call <4 x i16> asm "; def $0", "=s"()5747  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5748  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>5749  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5750  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5751  ret void5752}5753 5754define void @s_shuffle_v3i16_v3i16__3_0_0() {5755; GFX900-LABEL: s_shuffle_v3i16_v3i16__3_0_0:5756; GFX900:       ; %bb.0:5757; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5758; GFX900-NEXT:    ;;#ASMSTART5759; GFX900-NEXT:    ; def s[4:5]5760; GFX900-NEXT:    ;;#ASMEND5761; GFX900-NEXT:    s_lshl_b32 s8, s4, 165762; GFX900-NEXT:    s_mov_b32 s9, s45763; GFX900-NEXT:    ;;#ASMSTART5764; GFX900-NEXT:    ; use s[8:9]5765; GFX900-NEXT:    ;;#ASMEND5766; GFX900-NEXT:    s_setpc_b64 s[30:31]5767;5768; GFX90A-LABEL: s_shuffle_v3i16_v3i16__3_0_0:5769; GFX90A:       ; %bb.0:5770; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5771; GFX90A-NEXT:    ;;#ASMSTART5772; GFX90A-NEXT:    ; def s[4:5]5773; GFX90A-NEXT:    ;;#ASMEND5774; GFX90A-NEXT:    s_lshl_b32 s8, s4, 165775; GFX90A-NEXT:    s_mov_b32 s9, s45776; GFX90A-NEXT:    ;;#ASMSTART5777; GFX90A-NEXT:    ; use s[8:9]5778; GFX90A-NEXT:    ;;#ASMEND5779; GFX90A-NEXT:    s_setpc_b64 s[30:31]5780;5781; GFX942-LABEL: s_shuffle_v3i16_v3i16__3_0_0:5782; GFX942:       ; %bb.0:5783; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5784; GFX942-NEXT:    ;;#ASMSTART5785; GFX942-NEXT:    ; def s[0:1]5786; GFX942-NEXT:    ;;#ASMEND5787; GFX942-NEXT:    s_lshl_b32 s8, s0, 165788; GFX942-NEXT:    s_mov_b32 s9, s05789; GFX942-NEXT:    ;;#ASMSTART5790; GFX942-NEXT:    ; use s[8:9]5791; GFX942-NEXT:    ;;#ASMEND5792; GFX942-NEXT:    s_setpc_b64 s[30:31]5793  %vec0 = call <4 x i16> asm "; def $0", "=s"()5794  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5795  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 0, i32 0>5796  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5797  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5798  ret void5799}5800 5801define void @s_shuffle_v3i16_v3i16__4_0_0() {5802; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_0_0:5803; GFX900:       ; %bb.0:5804; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5805; GFX900-NEXT:    ;;#ASMSTART5806; GFX900-NEXT:    ; def s[4:5]5807; GFX900-NEXT:    ;;#ASMEND5808; GFX900-NEXT:    ;;#ASMSTART5809; GFX900-NEXT:    ; def s[6:7]5810; GFX900-NEXT:    ;;#ASMEND5811; GFX900-NEXT:    s_lshr_b32 s5, s6, 165812; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45813; GFX900-NEXT:    s_mov_b32 s9, s45814; GFX900-NEXT:    ;;#ASMSTART5815; GFX900-NEXT:    ; use s[8:9]5816; GFX900-NEXT:    ;;#ASMEND5817; GFX900-NEXT:    s_setpc_b64 s[30:31]5818;5819; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_0_0:5820; GFX90A:       ; %bb.0:5821; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5822; GFX90A-NEXT:    ;;#ASMSTART5823; GFX90A-NEXT:    ; def s[4:5]5824; GFX90A-NEXT:    ;;#ASMEND5825; GFX90A-NEXT:    ;;#ASMSTART5826; GFX90A-NEXT:    ; def s[6:7]5827; GFX90A-NEXT:    ;;#ASMEND5828; GFX90A-NEXT:    s_lshr_b32 s5, s6, 165829; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45830; GFX90A-NEXT:    s_mov_b32 s9, s45831; GFX90A-NEXT:    ;;#ASMSTART5832; GFX90A-NEXT:    ; use s[8:9]5833; GFX90A-NEXT:    ;;#ASMEND5834; GFX90A-NEXT:    s_setpc_b64 s[30:31]5835;5836; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_0_0:5837; GFX942:       ; %bb.0:5838; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5839; GFX942-NEXT:    ;;#ASMSTART5840; GFX942-NEXT:    ; def s[0:1]5841; GFX942-NEXT:    ;;#ASMEND5842; GFX942-NEXT:    ;;#ASMSTART5843; GFX942-NEXT:    ; def s[2:3]5844; GFX942-NEXT:    ;;#ASMEND5845; GFX942-NEXT:    s_lshr_b32 s1, s2, 165846; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05847; GFX942-NEXT:    s_mov_b32 s9, s05848; GFX942-NEXT:    ;;#ASMSTART5849; GFX942-NEXT:    ; use s[8:9]5850; GFX942-NEXT:    ;;#ASMEND5851; GFX942-NEXT:    s_setpc_b64 s[30:31]5852  %vec0 = call <4 x i16> asm "; def $0", "=s"()5853  %vec1 = call <4 x i16> asm "; def $0", "=s"()5854  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5855  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5856  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 0, i32 0>5857  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5858  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5859  ret void5860}5861 5862define void @s_shuffle_v3i16_v3i16__5_0_0() {5863; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_0:5864; GFX900:       ; %bb.0:5865; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5866; GFX900-NEXT:    ;;#ASMSTART5867; GFX900-NEXT:    ; def s[4:5]5868; GFX900-NEXT:    ;;#ASMEND5869; GFX900-NEXT:    ;;#ASMSTART5870; GFX900-NEXT:    ; def s[6:7]5871; GFX900-NEXT:    ;;#ASMEND5872; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s45873; GFX900-NEXT:    s_mov_b32 s9, s45874; GFX900-NEXT:    ;;#ASMSTART5875; GFX900-NEXT:    ; use s[8:9]5876; GFX900-NEXT:    ;;#ASMEND5877; GFX900-NEXT:    s_setpc_b64 s[30:31]5878;5879; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_0:5880; GFX90A:       ; %bb.0:5881; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5882; GFX90A-NEXT:    ;;#ASMSTART5883; GFX90A-NEXT:    ; def s[4:5]5884; GFX90A-NEXT:    ;;#ASMEND5885; GFX90A-NEXT:    ;;#ASMSTART5886; GFX90A-NEXT:    ; def s[6:7]5887; GFX90A-NEXT:    ;;#ASMEND5888; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s45889; GFX90A-NEXT:    s_mov_b32 s9, s45890; GFX90A-NEXT:    ;;#ASMSTART5891; GFX90A-NEXT:    ; use s[8:9]5892; GFX90A-NEXT:    ;;#ASMEND5893; GFX90A-NEXT:    s_setpc_b64 s[30:31]5894;5895; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_0:5896; GFX942:       ; %bb.0:5897; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5898; GFX942-NEXT:    ;;#ASMSTART5899; GFX942-NEXT:    ; def s[0:1]5900; GFX942-NEXT:    ;;#ASMEND5901; GFX942-NEXT:    ;;#ASMSTART5902; GFX942-NEXT:    ; def s[2:3]5903; GFX942-NEXT:    ;;#ASMEND5904; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s05905; GFX942-NEXT:    s_mov_b32 s9, s05906; GFX942-NEXT:    ;;#ASMSTART5907; GFX942-NEXT:    ; use s[8:9]5908; GFX942-NEXT:    ;;#ASMEND5909; GFX942-NEXT:    s_setpc_b64 s[30:31]5910  %vec0 = call <4 x i16> asm "; def $0", "=s"()5911  %vec1 = call <4 x i16> asm "; def $0", "=s"()5912  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5913  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5914  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 0>5915  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5916  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5917  ret void5918}5919 5920define void @s_shuffle_v3i16_v3i16__5_u_0() {5921; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_0:5922; GFX900:       ; %bb.0:5923; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5924; GFX900-NEXT:    ;;#ASMSTART5925; GFX900-NEXT:    ; def s[4:5]5926; GFX900-NEXT:    ;;#ASMEND5927; GFX900-NEXT:    ;;#ASMSTART5928; GFX900-NEXT:    ; def s[6:7]5929; GFX900-NEXT:    ;;#ASMEND5930; GFX900-NEXT:    s_mov_b32 s8, s75931; GFX900-NEXT:    s_mov_b32 s9, s45932; GFX900-NEXT:    ;;#ASMSTART5933; GFX900-NEXT:    ; use s[8:9]5934; GFX900-NEXT:    ;;#ASMEND5935; GFX900-NEXT:    s_setpc_b64 s[30:31]5936;5937; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_0:5938; GFX90A:       ; %bb.0:5939; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5940; GFX90A-NEXT:    ;;#ASMSTART5941; GFX90A-NEXT:    ; def s[4:5]5942; GFX90A-NEXT:    ;;#ASMEND5943; GFX90A-NEXT:    ;;#ASMSTART5944; GFX90A-NEXT:    ; def s[6:7]5945; GFX90A-NEXT:    ;;#ASMEND5946; GFX90A-NEXT:    s_mov_b32 s8, s75947; GFX90A-NEXT:    s_mov_b32 s9, s45948; GFX90A-NEXT:    ;;#ASMSTART5949; GFX90A-NEXT:    ; use s[8:9]5950; GFX90A-NEXT:    ;;#ASMEND5951; GFX90A-NEXT:    s_setpc_b64 s[30:31]5952;5953; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_0:5954; GFX942:       ; %bb.0:5955; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5956; GFX942-NEXT:    ;;#ASMSTART5957; GFX942-NEXT:    ; def s[0:1]5958; GFX942-NEXT:    ;;#ASMEND5959; GFX942-NEXT:    ;;#ASMSTART5960; GFX942-NEXT:    ; def s[2:3]5961; GFX942-NEXT:    ;;#ASMEND5962; GFX942-NEXT:    s_mov_b32 s8, s35963; GFX942-NEXT:    s_mov_b32 s9, s05964; GFX942-NEXT:    ;;#ASMSTART5965; GFX942-NEXT:    ; use s[8:9]5966; GFX942-NEXT:    ;;#ASMEND5967; GFX942-NEXT:    s_setpc_b64 s[30:31]5968  %vec0 = call <4 x i16> asm "; def $0", "=s"()5969  %vec1 = call <4 x i16> asm "; def $0", "=s"()5970  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5971  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5972  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 0>5973  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5974  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)5975  ret void5976}5977 5978define void @s_shuffle_v3i16_v3i16__5_1_0() {5979; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_0:5980; GFX900:       ; %bb.0:5981; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5982; GFX900-NEXT:    ;;#ASMSTART5983; GFX900-NEXT:    ; def s[4:5]5984; GFX900-NEXT:    ;;#ASMEND5985; GFX900-NEXT:    ;;#ASMSTART5986; GFX900-NEXT:    ; def s[6:7]5987; GFX900-NEXT:    ;;#ASMEND5988; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s45989; GFX900-NEXT:    s_mov_b32 s9, s45990; GFX900-NEXT:    ;;#ASMSTART5991; GFX900-NEXT:    ; use s[8:9]5992; GFX900-NEXT:    ;;#ASMEND5993; GFX900-NEXT:    s_setpc_b64 s[30:31]5994;5995; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_0:5996; GFX90A:       ; %bb.0:5997; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5998; GFX90A-NEXT:    ;;#ASMSTART5999; GFX90A-NEXT:    ; def s[4:5]6000; GFX90A-NEXT:    ;;#ASMEND6001; GFX90A-NEXT:    ;;#ASMSTART6002; GFX90A-NEXT:    ; def s[6:7]6003; GFX90A-NEXT:    ;;#ASMEND6004; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s46005; GFX90A-NEXT:    s_mov_b32 s9, s46006; GFX90A-NEXT:    ;;#ASMSTART6007; GFX90A-NEXT:    ; use s[8:9]6008; GFX90A-NEXT:    ;;#ASMEND6009; GFX90A-NEXT:    s_setpc_b64 s[30:31]6010;6011; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_0:6012; GFX942:       ; %bb.0:6013; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6014; GFX942-NEXT:    ;;#ASMSTART6015; GFX942-NEXT:    ; def s[0:1]6016; GFX942-NEXT:    ;;#ASMEND6017; GFX942-NEXT:    ;;#ASMSTART6018; GFX942-NEXT:    ; def s[2:3]6019; GFX942-NEXT:    ;;#ASMEND6020; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s06021; GFX942-NEXT:    s_mov_b32 s9, s06022; GFX942-NEXT:    ;;#ASMSTART6023; GFX942-NEXT:    ; use s[8:9]6024; GFX942-NEXT:    ;;#ASMEND6025; GFX942-NEXT:    s_setpc_b64 s[30:31]6026  %vec0 = call <4 x i16> asm "; def $0", "=s"()6027  %vec1 = call <4 x i16> asm "; def $0", "=s"()6028  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6029  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6030  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 0>6031  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6032  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6033  ret void6034}6035 6036define void @s_shuffle_v3i16_v3i16__5_2_0() {6037; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_0:6038; GFX900:       ; %bb.0:6039; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6040; GFX900-NEXT:    ;;#ASMSTART6041; GFX900-NEXT:    ; def s[4:5]6042; GFX900-NEXT:    ;;#ASMEND6043; GFX900-NEXT:    ;;#ASMSTART6044; GFX900-NEXT:    ; def s[6:7]6045; GFX900-NEXT:    ;;#ASMEND6046; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s56047; GFX900-NEXT:    s_mov_b32 s9, s46048; GFX900-NEXT:    ;;#ASMSTART6049; GFX900-NEXT:    ; use s[8:9]6050; GFX900-NEXT:    ;;#ASMEND6051; GFX900-NEXT:    s_setpc_b64 s[30:31]6052;6053; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_0:6054; GFX90A:       ; %bb.0:6055; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6056; GFX90A-NEXT:    ;;#ASMSTART6057; GFX90A-NEXT:    ; def s[4:5]6058; GFX90A-NEXT:    ;;#ASMEND6059; GFX90A-NEXT:    ;;#ASMSTART6060; GFX90A-NEXT:    ; def s[6:7]6061; GFX90A-NEXT:    ;;#ASMEND6062; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s56063; GFX90A-NEXT:    s_mov_b32 s9, s46064; GFX90A-NEXT:    ;;#ASMSTART6065; GFX90A-NEXT:    ; use s[8:9]6066; GFX90A-NEXT:    ;;#ASMEND6067; GFX90A-NEXT:    s_setpc_b64 s[30:31]6068;6069; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_0:6070; GFX942:       ; %bb.0:6071; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6072; GFX942-NEXT:    ;;#ASMSTART6073; GFX942-NEXT:    ; def s[0:1]6074; GFX942-NEXT:    ;;#ASMEND6075; GFX942-NEXT:    ;;#ASMSTART6076; GFX942-NEXT:    ; def s[2:3]6077; GFX942-NEXT:    ;;#ASMEND6078; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s16079; GFX942-NEXT:    s_mov_b32 s9, s06080; GFX942-NEXT:    ;;#ASMSTART6081; GFX942-NEXT:    ; use s[8:9]6082; GFX942-NEXT:    ;;#ASMEND6083; GFX942-NEXT:    s_setpc_b64 s[30:31]6084  %vec0 = call <4 x i16> asm "; def $0", "=s"()6085  %vec1 = call <4 x i16> asm "; def $0", "=s"()6086  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6087  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6088  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 0>6089  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6090  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6091  ret void6092}6093 6094define void @s_shuffle_v3i16_v3i16__5_3_0() {6095; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_0:6096; GFX900:       ; %bb.0:6097; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6098; GFX900-NEXT:    ;;#ASMSTART6099; GFX900-NEXT:    ; def s[4:5]6100; GFX900-NEXT:    ;;#ASMEND6101; GFX900-NEXT:    ;;#ASMSTART6102; GFX900-NEXT:    ; def s[6:7]6103; GFX900-NEXT:    ;;#ASMEND6104; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s66105; GFX900-NEXT:    s_mov_b32 s9, s46106; GFX900-NEXT:    ;;#ASMSTART6107; GFX900-NEXT:    ; use s[8:9]6108; GFX900-NEXT:    ;;#ASMEND6109; GFX900-NEXT:    s_setpc_b64 s[30:31]6110;6111; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_0:6112; GFX90A:       ; %bb.0:6113; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6114; GFX90A-NEXT:    ;;#ASMSTART6115; GFX90A-NEXT:    ; def s[4:5]6116; GFX90A-NEXT:    ;;#ASMEND6117; GFX90A-NEXT:    ;;#ASMSTART6118; GFX90A-NEXT:    ; def s[6:7]6119; GFX90A-NEXT:    ;;#ASMEND6120; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s66121; GFX90A-NEXT:    s_mov_b32 s9, s46122; GFX90A-NEXT:    ;;#ASMSTART6123; GFX90A-NEXT:    ; use s[8:9]6124; GFX90A-NEXT:    ;;#ASMEND6125; GFX90A-NEXT:    s_setpc_b64 s[30:31]6126;6127; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_0:6128; GFX942:       ; %bb.0:6129; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6130; GFX942-NEXT:    ;;#ASMSTART6131; GFX942-NEXT:    ; def s[0:1]6132; GFX942-NEXT:    ;;#ASMEND6133; GFX942-NEXT:    ;;#ASMSTART6134; GFX942-NEXT:    ; def s[2:3]6135; GFX942-NEXT:    ;;#ASMEND6136; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s26137; GFX942-NEXT:    s_mov_b32 s9, s06138; GFX942-NEXT:    ;;#ASMSTART6139; GFX942-NEXT:    ; use s[8:9]6140; GFX942-NEXT:    ;;#ASMEND6141; GFX942-NEXT:    s_setpc_b64 s[30:31]6142  %vec0 = call <4 x i16> asm "; def $0", "=s"()6143  %vec1 = call <4 x i16> asm "; def $0", "=s"()6144  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6145  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6146  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 0>6147  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6148  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6149  ret void6150}6151 6152define void @s_shuffle_v3i16_v3i16__5_4_0() {6153; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_0:6154; GFX900:       ; %bb.0:6155; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6156; GFX900-NEXT:    ;;#ASMSTART6157; GFX900-NEXT:    ; def s[4:5]6158; GFX900-NEXT:    ;;#ASMEND6159; GFX900-NEXT:    ;;#ASMSTART6160; GFX900-NEXT:    ; def s[6:7]6161; GFX900-NEXT:    ;;#ASMEND6162; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s66163; GFX900-NEXT:    s_mov_b32 s9, s46164; GFX900-NEXT:    ;;#ASMSTART6165; GFX900-NEXT:    ; use s[8:9]6166; GFX900-NEXT:    ;;#ASMEND6167; GFX900-NEXT:    s_setpc_b64 s[30:31]6168;6169; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_0:6170; GFX90A:       ; %bb.0:6171; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6172; GFX90A-NEXT:    ;;#ASMSTART6173; GFX90A-NEXT:    ; def s[4:5]6174; GFX90A-NEXT:    ;;#ASMEND6175; GFX90A-NEXT:    ;;#ASMSTART6176; GFX90A-NEXT:    ; def s[6:7]6177; GFX90A-NEXT:    ;;#ASMEND6178; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s66179; GFX90A-NEXT:    s_mov_b32 s9, s46180; GFX90A-NEXT:    ;;#ASMSTART6181; GFX90A-NEXT:    ; use s[8:9]6182; GFX90A-NEXT:    ;;#ASMEND6183; GFX90A-NEXT:    s_setpc_b64 s[30:31]6184;6185; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_0:6186; GFX942:       ; %bb.0:6187; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6188; GFX942-NEXT:    ;;#ASMSTART6189; GFX942-NEXT:    ; def s[0:1]6190; GFX942-NEXT:    ;;#ASMEND6191; GFX942-NEXT:    ;;#ASMSTART6192; GFX942-NEXT:    ; def s[2:3]6193; GFX942-NEXT:    ;;#ASMEND6194; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s26195; GFX942-NEXT:    s_mov_b32 s9, s06196; GFX942-NEXT:    ;;#ASMSTART6197; GFX942-NEXT:    ; use s[8:9]6198; GFX942-NEXT:    ;;#ASMEND6199; GFX942-NEXT:    s_setpc_b64 s[30:31]6200  %vec0 = call <4 x i16> asm "; def $0", "=s"()6201  %vec1 = call <4 x i16> asm "; def $0", "=s"()6202  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6203  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6204  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 0>6205  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6206  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6207  ret void6208}6209 6210define void @s_shuffle_v3i16_v3i16__u_1_1() {6211; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_1_1:6212; GFX9:       ; %bb.0:6213; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6214; GFX9-NEXT:    ;;#ASMSTART6215; GFX9-NEXT:    ; def s[8:9]6216; GFX9-NEXT:    ;;#ASMEND6217; GFX9-NEXT:    s_lshr_b32 s9, s8, 166218; GFX9-NEXT:    ;;#ASMSTART6219; GFX9-NEXT:    ; use s[8:9]6220; GFX9-NEXT:    ;;#ASMEND6221; GFX9-NEXT:    s_setpc_b64 s[30:31]6222  %vec0 = call <4 x i16> asm "; def $0", "=s"()6223  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6224  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>6225  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6226  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6227  ret void6228}6229 6230define void @s_shuffle_v3i16_v3i16__0_1_1() {6231; GFX9-LABEL: s_shuffle_v3i16_v3i16__0_1_1:6232; GFX9:       ; %bb.0:6233; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6234; GFX9-NEXT:    ;;#ASMSTART6235; GFX9-NEXT:    ; def s[8:9]6236; GFX9-NEXT:    ;;#ASMEND6237; GFX9-NEXT:    s_lshr_b32 s9, s8, 166238; GFX9-NEXT:    ;;#ASMSTART6239; GFX9-NEXT:    ; use s[8:9]6240; GFX9-NEXT:    ;;#ASMEND6241; GFX9-NEXT:    s_setpc_b64 s[30:31]6242  %vec0 = call <4 x i16> asm "; def $0", "=s"()6243  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6244  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>6245  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6246  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6247  ret void6248}6249 6250define void @s_shuffle_v3i16_v3i16__1_1_1() {6251; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_1_1:6252; GFX900:       ; %bb.0:6253; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6254; GFX900-NEXT:    ;;#ASMSTART6255; GFX900-NEXT:    ; def s[4:5]6256; GFX900-NEXT:    ;;#ASMEND6257; GFX900-NEXT:    s_lshr_b32 s9, s4, 166258; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s46259; GFX900-NEXT:    ;;#ASMSTART6260; GFX900-NEXT:    ; use s[8:9]6261; GFX900-NEXT:    ;;#ASMEND6262; GFX900-NEXT:    s_setpc_b64 s[30:31]6263;6264; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_1_1:6265; GFX90A:       ; %bb.0:6266; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6267; GFX90A-NEXT:    ;;#ASMSTART6268; GFX90A-NEXT:    ; def s[4:5]6269; GFX90A-NEXT:    ;;#ASMEND6270; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166271; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s46272; GFX90A-NEXT:    ;;#ASMSTART6273; GFX90A-NEXT:    ; use s[8:9]6274; GFX90A-NEXT:    ;;#ASMEND6275; GFX90A-NEXT:    s_setpc_b64 s[30:31]6276;6277; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_1_1:6278; GFX942:       ; %bb.0:6279; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6280; GFX942-NEXT:    ;;#ASMSTART6281; GFX942-NEXT:    ; def s[0:1]6282; GFX942-NEXT:    ;;#ASMEND6283; GFX942-NEXT:    s_lshr_b32 s9, s0, 166284; GFX942-NEXT:    s_pack_hh_b32_b16 s8, s0, s06285; GFX942-NEXT:    ;;#ASMSTART6286; GFX942-NEXT:    ; use s[8:9]6287; GFX942-NEXT:    ;;#ASMEND6288; GFX942-NEXT:    s_setpc_b64 s[30:31]6289  %vec0 = call <4 x i16> asm "; def $0", "=s"()6290  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6291  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>6292  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6293  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6294  ret void6295}6296 6297define void @s_shuffle_v3i16_v3i16__2_1_1() {6298; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_1_1:6299; GFX900:       ; %bb.0:6300; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6301; GFX900-NEXT:    ;;#ASMSTART6302; GFX900-NEXT:    ; def s[4:5]6303; GFX900-NEXT:    ;;#ASMEND6304; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s46305; GFX900-NEXT:    s_lshr_b32 s9, s4, 166306; GFX900-NEXT:    ;;#ASMSTART6307; GFX900-NEXT:    ; use s[8:9]6308; GFX900-NEXT:    ;;#ASMEND6309; GFX900-NEXT:    s_setpc_b64 s[30:31]6310;6311; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_1_1:6312; GFX90A:       ; %bb.0:6313; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6314; GFX90A-NEXT:    ;;#ASMSTART6315; GFX90A-NEXT:    ; def s[4:5]6316; GFX90A-NEXT:    ;;#ASMEND6317; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s46318; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166319; GFX90A-NEXT:    ;;#ASMSTART6320; GFX90A-NEXT:    ; use s[8:9]6321; GFX90A-NEXT:    ;;#ASMEND6322; GFX90A-NEXT:    s_setpc_b64 s[30:31]6323;6324; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_1_1:6325; GFX942:       ; %bb.0:6326; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6327; GFX942-NEXT:    ;;#ASMSTART6328; GFX942-NEXT:    ; def s[0:1]6329; GFX942-NEXT:    ;;#ASMEND6330; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s06331; GFX942-NEXT:    s_lshr_b32 s9, s0, 166332; GFX942-NEXT:    ;;#ASMSTART6333; GFX942-NEXT:    ; use s[8:9]6334; GFX942-NEXT:    ;;#ASMEND6335; GFX942-NEXT:    s_setpc_b64 s[30:31]6336  %vec0 = call <4 x i16> asm "; def $0", "=s"()6337  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6338  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>6339  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6340  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6341  ret void6342}6343 6344define void @s_shuffle_v3i16_v3i16__3_1_1() {6345; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_1_1:6346; GFX9:       ; %bb.0:6347; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6348; GFX9-NEXT:    ;;#ASMSTART6349; GFX9-NEXT:    ; def s[8:9]6350; GFX9-NEXT:    ;;#ASMEND6351; GFX9-NEXT:    s_lshr_b32 s9, s8, 166352; GFX9-NEXT:    ;;#ASMSTART6353; GFX9-NEXT:    ; use s[8:9]6354; GFX9-NEXT:    ;;#ASMEND6355; GFX9-NEXT:    s_setpc_b64 s[30:31]6356  %vec0 = call <4 x i16> asm "; def $0", "=s"()6357  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6358  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 1, i32 1>6359  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6360  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6361  ret void6362}6363 6364define void @s_shuffle_v3i16_v3i16__4_1_1() {6365; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_1_1:6366; GFX900:       ; %bb.0:6367; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6368; GFX900-NEXT:    ;;#ASMSTART6369; GFX900-NEXT:    ; def s[4:5]6370; GFX900-NEXT:    ;;#ASMEND6371; GFX900-NEXT:    ;;#ASMSTART6372; GFX900-NEXT:    ; def s[6:7]6373; GFX900-NEXT:    ;;#ASMEND6374; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s6, s46375; GFX900-NEXT:    s_lshr_b32 s9, s4, 166376; GFX900-NEXT:    ;;#ASMSTART6377; GFX900-NEXT:    ; use s[8:9]6378; GFX900-NEXT:    ;;#ASMEND6379; GFX900-NEXT:    s_setpc_b64 s[30:31]6380;6381; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_1_1:6382; GFX90A:       ; %bb.0:6383; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6384; GFX90A-NEXT:    ;;#ASMSTART6385; GFX90A-NEXT:    ; def s[4:5]6386; GFX90A-NEXT:    ;;#ASMEND6387; GFX90A-NEXT:    ;;#ASMSTART6388; GFX90A-NEXT:    ; def s[6:7]6389; GFX90A-NEXT:    ;;#ASMEND6390; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s6, s46391; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166392; GFX90A-NEXT:    ;;#ASMSTART6393; GFX90A-NEXT:    ; use s[8:9]6394; GFX90A-NEXT:    ;;#ASMEND6395; GFX90A-NEXT:    s_setpc_b64 s[30:31]6396;6397; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_1_1:6398; GFX942:       ; %bb.0:6399; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6400; GFX942-NEXT:    ;;#ASMSTART6401; GFX942-NEXT:    ; def s[0:1]6402; GFX942-NEXT:    ;;#ASMEND6403; GFX942-NEXT:    ;;#ASMSTART6404; GFX942-NEXT:    ; def s[2:3]6405; GFX942-NEXT:    ;;#ASMEND6406; GFX942-NEXT:    s_pack_hh_b32_b16 s8, s2, s06407; GFX942-NEXT:    s_lshr_b32 s9, s0, 166408; GFX942-NEXT:    ;;#ASMSTART6409; GFX942-NEXT:    ; use s[8:9]6410; GFX942-NEXT:    ;;#ASMEND6411; GFX942-NEXT:    s_setpc_b64 s[30:31]6412  %vec0 = call <4 x i16> asm "; def $0", "=s"()6413  %vec1 = call <4 x i16> asm "; def $0", "=s"()6414  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6415  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6416  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 1, i32 1>6417  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6418  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6419  ret void6420}6421 6422define void @s_shuffle_v3i16_v3i16__5_1_1() {6423; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_1:6424; GFX900:       ; %bb.0:6425; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6426; GFX900-NEXT:    ;;#ASMSTART6427; GFX900-NEXT:    ; def s[4:5]6428; GFX900-NEXT:    ;;#ASMEND6429; GFX900-NEXT:    ;;#ASMSTART6430; GFX900-NEXT:    ; def s[6:7]6431; GFX900-NEXT:    ;;#ASMEND6432; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s46433; GFX900-NEXT:    s_lshr_b32 s9, s4, 166434; GFX900-NEXT:    ;;#ASMSTART6435; GFX900-NEXT:    ; use s[8:9]6436; GFX900-NEXT:    ;;#ASMEND6437; GFX900-NEXT:    s_setpc_b64 s[30:31]6438;6439; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_1:6440; GFX90A:       ; %bb.0:6441; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6442; GFX90A-NEXT:    ;;#ASMSTART6443; GFX90A-NEXT:    ; def s[4:5]6444; GFX90A-NEXT:    ;;#ASMEND6445; GFX90A-NEXT:    ;;#ASMSTART6446; GFX90A-NEXT:    ; def s[6:7]6447; GFX90A-NEXT:    ;;#ASMEND6448; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s46449; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166450; GFX90A-NEXT:    ;;#ASMSTART6451; GFX90A-NEXT:    ; use s[8:9]6452; GFX90A-NEXT:    ;;#ASMEND6453; GFX90A-NEXT:    s_setpc_b64 s[30:31]6454;6455; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_1:6456; GFX942:       ; %bb.0:6457; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6458; GFX942-NEXT:    ;;#ASMSTART6459; GFX942-NEXT:    ; def s[0:1]6460; GFX942-NEXT:    ;;#ASMEND6461; GFX942-NEXT:    ;;#ASMSTART6462; GFX942-NEXT:    ; def s[2:3]6463; GFX942-NEXT:    ;;#ASMEND6464; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s06465; GFX942-NEXT:    s_lshr_b32 s9, s0, 166466; GFX942-NEXT:    ;;#ASMSTART6467; GFX942-NEXT:    ; use s[8:9]6468; GFX942-NEXT:    ;;#ASMEND6469; GFX942-NEXT:    s_setpc_b64 s[30:31]6470  %vec0 = call <4 x i16> asm "; def $0", "=s"()6471  %vec1 = call <4 x i16> asm "; def $0", "=s"()6472  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6473  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6474  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 1>6475  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6476  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6477  ret void6478}6479 6480define void @s_shuffle_v3i16_v3i16__5_u_1() {6481; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_1:6482; GFX900:       ; %bb.0:6483; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6484; GFX900-NEXT:    ;;#ASMSTART6485; GFX900-NEXT:    ; def s[4:5]6486; GFX900-NEXT:    ;;#ASMEND6487; GFX900-NEXT:    ;;#ASMSTART6488; GFX900-NEXT:    ; def s[6:7]6489; GFX900-NEXT:    ;;#ASMEND6490; GFX900-NEXT:    s_lshr_b32 s9, s4, 166491; GFX900-NEXT:    s_mov_b32 s8, s76492; GFX900-NEXT:    ;;#ASMSTART6493; GFX900-NEXT:    ; use s[8:9]6494; GFX900-NEXT:    ;;#ASMEND6495; GFX900-NEXT:    s_setpc_b64 s[30:31]6496;6497; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_1:6498; GFX90A:       ; %bb.0:6499; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6500; GFX90A-NEXT:    ;;#ASMSTART6501; GFX90A-NEXT:    ; def s[4:5]6502; GFX90A-NEXT:    ;;#ASMEND6503; GFX90A-NEXT:    ;;#ASMSTART6504; GFX90A-NEXT:    ; def s[6:7]6505; GFX90A-NEXT:    ;;#ASMEND6506; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166507; GFX90A-NEXT:    s_mov_b32 s8, s76508; GFX90A-NEXT:    ;;#ASMSTART6509; GFX90A-NEXT:    ; use s[8:9]6510; GFX90A-NEXT:    ;;#ASMEND6511; GFX90A-NEXT:    s_setpc_b64 s[30:31]6512;6513; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_1:6514; GFX942:       ; %bb.0:6515; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6516; GFX942-NEXT:    ;;#ASMSTART6517; GFX942-NEXT:    ; def s[0:1]6518; GFX942-NEXT:    ;;#ASMEND6519; GFX942-NEXT:    ;;#ASMSTART6520; GFX942-NEXT:    ; def s[2:3]6521; GFX942-NEXT:    ;;#ASMEND6522; GFX942-NEXT:    s_lshr_b32 s9, s0, 166523; GFX942-NEXT:    s_mov_b32 s8, s36524; GFX942-NEXT:    ;;#ASMSTART6525; GFX942-NEXT:    ; use s[8:9]6526; GFX942-NEXT:    ;;#ASMEND6527; GFX942-NEXT:    s_setpc_b64 s[30:31]6528  %vec0 = call <4 x i16> asm "; def $0", "=s"()6529  %vec1 = call <4 x i16> asm "; def $0", "=s"()6530  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6531  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6532  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 1>6533  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6534  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6535  ret void6536}6537 6538define void @s_shuffle_v3i16_v3i16__5_0_1() {6539; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_1:6540; GFX900:       ; %bb.0:6541; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6542; GFX900-NEXT:    ;;#ASMSTART6543; GFX900-NEXT:    ; def s[4:5]6544; GFX900-NEXT:    ;;#ASMEND6545; GFX900-NEXT:    ;;#ASMSTART6546; GFX900-NEXT:    ; def s[6:7]6547; GFX900-NEXT:    ;;#ASMEND6548; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s46549; GFX900-NEXT:    s_lshr_b32 s9, s4, 166550; GFX900-NEXT:    ;;#ASMSTART6551; GFX900-NEXT:    ; use s[8:9]6552; GFX900-NEXT:    ;;#ASMEND6553; GFX900-NEXT:    s_setpc_b64 s[30:31]6554;6555; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_1:6556; GFX90A:       ; %bb.0:6557; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6558; GFX90A-NEXT:    ;;#ASMSTART6559; GFX90A-NEXT:    ; def s[4:5]6560; GFX90A-NEXT:    ;;#ASMEND6561; GFX90A-NEXT:    ;;#ASMSTART6562; GFX90A-NEXT:    ; def s[6:7]6563; GFX90A-NEXT:    ;;#ASMEND6564; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s46565; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166566; GFX90A-NEXT:    ;;#ASMSTART6567; GFX90A-NEXT:    ; use s[8:9]6568; GFX90A-NEXT:    ;;#ASMEND6569; GFX90A-NEXT:    s_setpc_b64 s[30:31]6570;6571; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_1:6572; GFX942:       ; %bb.0:6573; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6574; GFX942-NEXT:    ;;#ASMSTART6575; GFX942-NEXT:    ; def s[0:1]6576; GFX942-NEXT:    ;;#ASMEND6577; GFX942-NEXT:    ;;#ASMSTART6578; GFX942-NEXT:    ; def s[2:3]6579; GFX942-NEXT:    ;;#ASMEND6580; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s06581; GFX942-NEXT:    s_lshr_b32 s9, s0, 166582; GFX942-NEXT:    ;;#ASMSTART6583; GFX942-NEXT:    ; use s[8:9]6584; GFX942-NEXT:    ;;#ASMEND6585; GFX942-NEXT:    s_setpc_b64 s[30:31]6586  %vec0 = call <4 x i16> asm "; def $0", "=s"()6587  %vec1 = call <4 x i16> asm "; def $0", "=s"()6588  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6589  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6590  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 1>6591  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6592  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6593  ret void6594}6595 6596define void @s_shuffle_v3i16_v3i16__5_2_1() {6597; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_1:6598; GFX900:       ; %bb.0:6599; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6600; GFX900-NEXT:    ;;#ASMSTART6601; GFX900-NEXT:    ; def s[4:5]6602; GFX900-NEXT:    ;;#ASMEND6603; GFX900-NEXT:    ;;#ASMSTART6604; GFX900-NEXT:    ; def s[6:7]6605; GFX900-NEXT:    ;;#ASMEND6606; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s56607; GFX900-NEXT:    s_lshr_b32 s9, s4, 166608; GFX900-NEXT:    ;;#ASMSTART6609; GFX900-NEXT:    ; use s[8:9]6610; GFX900-NEXT:    ;;#ASMEND6611; GFX900-NEXT:    s_setpc_b64 s[30:31]6612;6613; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_1:6614; GFX90A:       ; %bb.0:6615; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6616; GFX90A-NEXT:    ;;#ASMSTART6617; GFX90A-NEXT:    ; def s[4:5]6618; GFX90A-NEXT:    ;;#ASMEND6619; GFX90A-NEXT:    ;;#ASMSTART6620; GFX90A-NEXT:    ; def s[6:7]6621; GFX90A-NEXT:    ;;#ASMEND6622; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s56623; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166624; GFX90A-NEXT:    ;;#ASMSTART6625; GFX90A-NEXT:    ; use s[8:9]6626; GFX90A-NEXT:    ;;#ASMEND6627; GFX90A-NEXT:    s_setpc_b64 s[30:31]6628;6629; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_1:6630; GFX942:       ; %bb.0:6631; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6632; GFX942-NEXT:    ;;#ASMSTART6633; GFX942-NEXT:    ; def s[0:1]6634; GFX942-NEXT:    ;;#ASMEND6635; GFX942-NEXT:    ;;#ASMSTART6636; GFX942-NEXT:    ; def s[2:3]6637; GFX942-NEXT:    ;;#ASMEND6638; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s16639; GFX942-NEXT:    s_lshr_b32 s9, s0, 166640; GFX942-NEXT:    ;;#ASMSTART6641; GFX942-NEXT:    ; use s[8:9]6642; GFX942-NEXT:    ;;#ASMEND6643; GFX942-NEXT:    s_setpc_b64 s[30:31]6644  %vec0 = call <4 x i16> asm "; def $0", "=s"()6645  %vec1 = call <4 x i16> asm "; def $0", "=s"()6646  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6647  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6648  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 1>6649  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6650  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6651  ret void6652}6653 6654define void @s_shuffle_v3i16_v3i16__5_3_1() {6655; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_1:6656; GFX900:       ; %bb.0:6657; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6658; GFX900-NEXT:    ;;#ASMSTART6659; GFX900-NEXT:    ; def s[4:5]6660; GFX900-NEXT:    ;;#ASMEND6661; GFX900-NEXT:    ;;#ASMSTART6662; GFX900-NEXT:    ; def s[6:7]6663; GFX900-NEXT:    ;;#ASMEND6664; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s66665; GFX900-NEXT:    s_lshr_b32 s9, s4, 166666; GFX900-NEXT:    ;;#ASMSTART6667; GFX900-NEXT:    ; use s[8:9]6668; GFX900-NEXT:    ;;#ASMEND6669; GFX900-NEXT:    s_setpc_b64 s[30:31]6670;6671; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_1:6672; GFX90A:       ; %bb.0:6673; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6674; GFX90A-NEXT:    ;;#ASMSTART6675; GFX90A-NEXT:    ; def s[4:5]6676; GFX90A-NEXT:    ;;#ASMEND6677; GFX90A-NEXT:    ;;#ASMSTART6678; GFX90A-NEXT:    ; def s[6:7]6679; GFX90A-NEXT:    ;;#ASMEND6680; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s66681; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166682; GFX90A-NEXT:    ;;#ASMSTART6683; GFX90A-NEXT:    ; use s[8:9]6684; GFX90A-NEXT:    ;;#ASMEND6685; GFX90A-NEXT:    s_setpc_b64 s[30:31]6686;6687; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_1:6688; GFX942:       ; %bb.0:6689; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6690; GFX942-NEXT:    ;;#ASMSTART6691; GFX942-NEXT:    ; def s[0:1]6692; GFX942-NEXT:    ;;#ASMEND6693; GFX942-NEXT:    ;;#ASMSTART6694; GFX942-NEXT:    ; def s[2:3]6695; GFX942-NEXT:    ;;#ASMEND6696; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s26697; GFX942-NEXT:    s_lshr_b32 s9, s0, 166698; GFX942-NEXT:    ;;#ASMSTART6699; GFX942-NEXT:    ; use s[8:9]6700; GFX942-NEXT:    ;;#ASMEND6701; GFX942-NEXT:    s_setpc_b64 s[30:31]6702  %vec0 = call <4 x i16> asm "; def $0", "=s"()6703  %vec1 = call <4 x i16> asm "; def $0", "=s"()6704  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6705  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6706  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 1>6707  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6708  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6709  ret void6710}6711 6712define void @s_shuffle_v3i16_v3i16__5_4_1() {6713; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_1:6714; GFX900:       ; %bb.0:6715; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6716; GFX900-NEXT:    ;;#ASMSTART6717; GFX900-NEXT:    ; def s[4:5]6718; GFX900-NEXT:    ;;#ASMEND6719; GFX900-NEXT:    ;;#ASMSTART6720; GFX900-NEXT:    ; def s[6:7]6721; GFX900-NEXT:    ;;#ASMEND6722; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s66723; GFX900-NEXT:    s_lshr_b32 s9, s4, 166724; GFX900-NEXT:    ;;#ASMSTART6725; GFX900-NEXT:    ; use s[8:9]6726; GFX900-NEXT:    ;;#ASMEND6727; GFX900-NEXT:    s_setpc_b64 s[30:31]6728;6729; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_1:6730; GFX90A:       ; %bb.0:6731; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6732; GFX90A-NEXT:    ;;#ASMSTART6733; GFX90A-NEXT:    ; def s[4:5]6734; GFX90A-NEXT:    ;;#ASMEND6735; GFX90A-NEXT:    ;;#ASMSTART6736; GFX90A-NEXT:    ; def s[6:7]6737; GFX90A-NEXT:    ;;#ASMEND6738; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s66739; GFX90A-NEXT:    s_lshr_b32 s9, s4, 166740; GFX90A-NEXT:    ;;#ASMSTART6741; GFX90A-NEXT:    ; use s[8:9]6742; GFX90A-NEXT:    ;;#ASMEND6743; GFX90A-NEXT:    s_setpc_b64 s[30:31]6744;6745; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_1:6746; GFX942:       ; %bb.0:6747; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6748; GFX942-NEXT:    ;;#ASMSTART6749; GFX942-NEXT:    ; def s[0:1]6750; GFX942-NEXT:    ;;#ASMEND6751; GFX942-NEXT:    ;;#ASMSTART6752; GFX942-NEXT:    ; def s[2:3]6753; GFX942-NEXT:    ;;#ASMEND6754; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s26755; GFX942-NEXT:    s_lshr_b32 s9, s0, 166756; GFX942-NEXT:    ;;#ASMSTART6757; GFX942-NEXT:    ; use s[8:9]6758; GFX942-NEXT:    ;;#ASMEND6759; GFX942-NEXT:    s_setpc_b64 s[30:31]6760  %vec0 = call <4 x i16> asm "; def $0", "=s"()6761  %vec1 = call <4 x i16> asm "; def $0", "=s"()6762  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6763  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6764  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 1>6765  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6766  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6767  ret void6768}6769 6770define void @s_shuffle_v3i16_v3i16__u_2_2() {6771; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_2_2:6772; GFX9:       ; %bb.0:6773; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6774; GFX9-NEXT:    ;;#ASMSTART6775; GFX9-NEXT:    ; def s[8:9]6776; GFX9-NEXT:    ;;#ASMEND6777; GFX9-NEXT:    s_lshl_b32 s8, s9, 166778; GFX9-NEXT:    ;;#ASMSTART6779; GFX9-NEXT:    ; use s[8:9]6780; GFX9-NEXT:    ;;#ASMEND6781; GFX9-NEXT:    s_setpc_b64 s[30:31]6782  %vec0 = call <4 x i16> asm "; def $0", "=s"()6783  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6784  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>6785  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6786  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6787  ret void6788}6789 6790define void @s_shuffle_v3i16_v3i16__0_2_2() {6791; GFX9-LABEL: s_shuffle_v3i16_v3i16__0_2_2:6792; GFX9:       ; %bb.0:6793; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6794; GFX9-NEXT:    ;;#ASMSTART6795; GFX9-NEXT:    ; def s[8:9]6796; GFX9-NEXT:    ;;#ASMEND6797; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s8, s96798; GFX9-NEXT:    ;;#ASMSTART6799; GFX9-NEXT:    ; use s[8:9]6800; GFX9-NEXT:    ;;#ASMEND6801; GFX9-NEXT:    s_setpc_b64 s[30:31]6802  %vec0 = call <4 x i16> asm "; def $0", "=s"()6803  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6804  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>6805  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6806  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6807  ret void6808}6809 6810define void @s_shuffle_v3i16_v3i16__1_2_2() {6811; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_2_2:6812; GFX900:       ; %bb.0:6813; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6814; GFX900-NEXT:    ;;#ASMSTART6815; GFX900-NEXT:    ; def s[8:9]6816; GFX900-NEXT:    ;;#ASMEND6817; GFX900-NEXT:    s_lshr_b32 s4, s8, 166818; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s96819; GFX900-NEXT:    ;;#ASMSTART6820; GFX900-NEXT:    ; use s[8:9]6821; GFX900-NEXT:    ;;#ASMEND6822; GFX900-NEXT:    s_setpc_b64 s[30:31]6823;6824; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_2_2:6825; GFX90A:       ; %bb.0:6826; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6827; GFX90A-NEXT:    ;;#ASMSTART6828; GFX90A-NEXT:    ; def s[8:9]6829; GFX90A-NEXT:    ;;#ASMEND6830; GFX90A-NEXT:    s_lshr_b32 s4, s8, 166831; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s96832; GFX90A-NEXT:    ;;#ASMSTART6833; GFX90A-NEXT:    ; use s[8:9]6834; GFX90A-NEXT:    ;;#ASMEND6835; GFX90A-NEXT:    s_setpc_b64 s[30:31]6836;6837; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_2_2:6838; GFX942:       ; %bb.0:6839; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6840; GFX942-NEXT:    ;;#ASMSTART6841; GFX942-NEXT:    ; def s[8:9]6842; GFX942-NEXT:    ;;#ASMEND6843; GFX942-NEXT:    s_lshr_b32 s0, s8, 166844; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s96845; GFX942-NEXT:    ;;#ASMSTART6846; GFX942-NEXT:    ; use s[8:9]6847; GFX942-NEXT:    ;;#ASMEND6848; GFX942-NEXT:    s_setpc_b64 s[30:31]6849  %vec0 = call <4 x i16> asm "; def $0", "=s"()6850  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6851  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>6852  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6853  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6854  ret void6855}6856 6857define void @s_shuffle_v3i16_v3i16__2_2_2() {6858; GFX9-LABEL: s_shuffle_v3i16_v3i16__2_2_2:6859; GFX9:       ; %bb.0:6860; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6861; GFX9-NEXT:    ;;#ASMSTART6862; GFX9-NEXT:    ; def s[8:9]6863; GFX9-NEXT:    ;;#ASMEND6864; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s96865; GFX9-NEXT:    ;;#ASMSTART6866; GFX9-NEXT:    ; use s[8:9]6867; GFX9-NEXT:    ;;#ASMEND6868; GFX9-NEXT:    s_setpc_b64 s[30:31]6869  %vec0 = call <4 x i16> asm "; def $0", "=s"()6870  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6871  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>6872  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6873  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6874  ret void6875}6876 6877define void @s_shuffle_v3i16_v3i16__3_2_2() {6878; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_2_2:6879; GFX9:       ; %bb.0:6880; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6881; GFX9-NEXT:    ;;#ASMSTART6882; GFX9-NEXT:    ; def s[8:9]6883; GFX9-NEXT:    ;;#ASMEND6884; GFX9-NEXT:    s_lshl_b32 s8, s9, 166885; GFX9-NEXT:    ;;#ASMSTART6886; GFX9-NEXT:    ; use s[8:9]6887; GFX9-NEXT:    ;;#ASMEND6888; GFX9-NEXT:    s_setpc_b64 s[30:31]6889  %vec0 = call <4 x i16> asm "; def $0", "=s"()6890  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6891  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 2, i32 2>6892  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6893  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6894  ret void6895}6896 6897define void @s_shuffle_v3i16_v3i16__4_2_2() {6898; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_2_2:6899; GFX900:       ; %bb.0:6900; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6901; GFX900-NEXT:    ;;#ASMSTART6902; GFX900-NEXT:    ; def s[4:5]6903; GFX900-NEXT:    ;;#ASMEND6904; GFX900-NEXT:    ;;#ASMSTART6905; GFX900-NEXT:    ; def s[8:9]6906; GFX900-NEXT:    ;;#ASMEND6907; GFX900-NEXT:    s_lshr_b32 s4, s4, 166908; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s96909; GFX900-NEXT:    ;;#ASMSTART6910; GFX900-NEXT:    ; use s[8:9]6911; GFX900-NEXT:    ;;#ASMEND6912; GFX900-NEXT:    s_setpc_b64 s[30:31]6913;6914; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_2_2:6915; GFX90A:       ; %bb.0:6916; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6917; GFX90A-NEXT:    ;;#ASMSTART6918; GFX90A-NEXT:    ; def s[4:5]6919; GFX90A-NEXT:    ;;#ASMEND6920; GFX90A-NEXT:    ;;#ASMSTART6921; GFX90A-NEXT:    ; def s[8:9]6922; GFX90A-NEXT:    ;;#ASMEND6923; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166924; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s96925; GFX90A-NEXT:    ;;#ASMSTART6926; GFX90A-NEXT:    ; use s[8:9]6927; GFX90A-NEXT:    ;;#ASMEND6928; GFX90A-NEXT:    s_setpc_b64 s[30:31]6929;6930; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_2_2:6931; GFX942:       ; %bb.0:6932; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6933; GFX942-NEXT:    ;;#ASMSTART6934; GFX942-NEXT:    ; def s[0:1]6935; GFX942-NEXT:    ;;#ASMEND6936; GFX942-NEXT:    ;;#ASMSTART6937; GFX942-NEXT:    ; def s[8:9]6938; GFX942-NEXT:    ;;#ASMEND6939; GFX942-NEXT:    s_lshr_b32 s0, s0, 166940; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s96941; GFX942-NEXT:    ;;#ASMSTART6942; GFX942-NEXT:    ; use s[8:9]6943; GFX942-NEXT:    ;;#ASMEND6944; GFX942-NEXT:    s_setpc_b64 s[30:31]6945  %vec0 = call <4 x i16> asm "; def $0", "=s"()6946  %vec1 = call <4 x i16> asm "; def $0", "=s"()6947  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6948  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6949  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 2, i32 2>6950  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6951  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)6952  ret void6953}6954 6955define void @s_shuffle_v3i16_v3i16__5_2_2() {6956; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_2:6957; GFX900:       ; %bb.0:6958; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6959; GFX900-NEXT:    ;;#ASMSTART6960; GFX900-NEXT:    ; def s[8:9]6961; GFX900-NEXT:    ;;#ASMEND6962; GFX900-NEXT:    ;;#ASMSTART6963; GFX900-NEXT:    ; def s[4:5]6964; GFX900-NEXT:    ;;#ASMEND6965; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s96966; GFX900-NEXT:    ;;#ASMSTART6967; GFX900-NEXT:    ; use s[8:9]6968; GFX900-NEXT:    ;;#ASMEND6969; GFX900-NEXT:    s_setpc_b64 s[30:31]6970;6971; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_2:6972; GFX90A:       ; %bb.0:6973; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6974; GFX90A-NEXT:    ;;#ASMSTART6975; GFX90A-NEXT:    ; def s[8:9]6976; GFX90A-NEXT:    ;;#ASMEND6977; GFX90A-NEXT:    ;;#ASMSTART6978; GFX90A-NEXT:    ; def s[4:5]6979; GFX90A-NEXT:    ;;#ASMEND6980; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s96981; GFX90A-NEXT:    ;;#ASMSTART6982; GFX90A-NEXT:    ; use s[8:9]6983; GFX90A-NEXT:    ;;#ASMEND6984; GFX90A-NEXT:    s_setpc_b64 s[30:31]6985;6986; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_2:6987; GFX942:       ; %bb.0:6988; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6989; GFX942-NEXT:    ;;#ASMSTART6990; GFX942-NEXT:    ; def s[8:9]6991; GFX942-NEXT:    ;;#ASMEND6992; GFX942-NEXT:    ;;#ASMSTART6993; GFX942-NEXT:    ; def s[0:1]6994; GFX942-NEXT:    ;;#ASMEND6995; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s96996; GFX942-NEXT:    ;;#ASMSTART6997; GFX942-NEXT:    ; use s[8:9]6998; GFX942-NEXT:    ;;#ASMEND6999; GFX942-NEXT:    s_setpc_b64 s[30:31]7000  %vec0 = call <4 x i16> asm "; def $0", "=s"()7001  %vec1 = call <4 x i16> asm "; def $0", "=s"()7002  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7003  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7004  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 2>7005  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7006  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7007  ret void7008}7009 7010define void @s_shuffle_v3i16_v3i16__5_u_2() {7011; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_2:7012; GFX900:       ; %bb.0:7013; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7014; GFX900-NEXT:    ;;#ASMSTART7015; GFX900-NEXT:    ; def s[8:9]7016; GFX900-NEXT:    ;;#ASMEND7017; GFX900-NEXT:    ;;#ASMSTART7018; GFX900-NEXT:    ; def s[4:5]7019; GFX900-NEXT:    ;;#ASMEND7020; GFX900-NEXT:    s_mov_b32 s8, s57021; GFX900-NEXT:    ;;#ASMSTART7022; GFX900-NEXT:    ; use s[8:9]7023; GFX900-NEXT:    ;;#ASMEND7024; GFX900-NEXT:    s_setpc_b64 s[30:31]7025;7026; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_2:7027; GFX90A:       ; %bb.0:7028; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7029; GFX90A-NEXT:    ;;#ASMSTART7030; GFX90A-NEXT:    ; def s[8:9]7031; GFX90A-NEXT:    ;;#ASMEND7032; GFX90A-NEXT:    ;;#ASMSTART7033; GFX90A-NEXT:    ; def s[4:5]7034; GFX90A-NEXT:    ;;#ASMEND7035; GFX90A-NEXT:    s_mov_b32 s8, s57036; GFX90A-NEXT:    ;;#ASMSTART7037; GFX90A-NEXT:    ; use s[8:9]7038; GFX90A-NEXT:    ;;#ASMEND7039; GFX90A-NEXT:    s_setpc_b64 s[30:31]7040;7041; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_2:7042; GFX942:       ; %bb.0:7043; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7044; GFX942-NEXT:    ;;#ASMSTART7045; GFX942-NEXT:    ; def s[8:9]7046; GFX942-NEXT:    ;;#ASMEND7047; GFX942-NEXT:    ;;#ASMSTART7048; GFX942-NEXT:    ; def s[0:1]7049; GFX942-NEXT:    ;;#ASMEND7050; GFX942-NEXT:    s_mov_b32 s8, s17051; GFX942-NEXT:    ;;#ASMSTART7052; GFX942-NEXT:    ; use s[8:9]7053; GFX942-NEXT:    ;;#ASMEND7054; GFX942-NEXT:    s_setpc_b64 s[30:31]7055  %vec0 = call <4 x i16> asm "; def $0", "=s"()7056  %vec1 = call <4 x i16> asm "; def $0", "=s"()7057  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7058  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7059  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 2>7060  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7061  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7062  ret void7063}7064 7065define void @s_shuffle_v3i16_v3i16__5_0_2() {7066; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_2:7067; GFX900:       ; %bb.0:7068; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7069; GFX900-NEXT:    ;;#ASMSTART7070; GFX900-NEXT:    ; def s[8:9]7071; GFX900-NEXT:    ;;#ASMEND7072; GFX900-NEXT:    ;;#ASMSTART7073; GFX900-NEXT:    ; def s[4:5]7074; GFX900-NEXT:    ;;#ASMEND7075; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s87076; GFX900-NEXT:    ;;#ASMSTART7077; GFX900-NEXT:    ; use s[8:9]7078; GFX900-NEXT:    ;;#ASMEND7079; GFX900-NEXT:    s_setpc_b64 s[30:31]7080;7081; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_2:7082; GFX90A:       ; %bb.0:7083; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7084; GFX90A-NEXT:    ;;#ASMSTART7085; GFX90A-NEXT:    ; def s[8:9]7086; GFX90A-NEXT:    ;;#ASMEND7087; GFX90A-NEXT:    ;;#ASMSTART7088; GFX90A-NEXT:    ; def s[4:5]7089; GFX90A-NEXT:    ;;#ASMEND7090; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s87091; GFX90A-NEXT:    ;;#ASMSTART7092; GFX90A-NEXT:    ; use s[8:9]7093; GFX90A-NEXT:    ;;#ASMEND7094; GFX90A-NEXT:    s_setpc_b64 s[30:31]7095;7096; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_2:7097; GFX942:       ; %bb.0:7098; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7099; GFX942-NEXT:    ;;#ASMSTART7100; GFX942-NEXT:    ; def s[8:9]7101; GFX942-NEXT:    ;;#ASMEND7102; GFX942-NEXT:    ;;#ASMSTART7103; GFX942-NEXT:    ; def s[0:1]7104; GFX942-NEXT:    ;;#ASMEND7105; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s87106; GFX942-NEXT:    ;;#ASMSTART7107; GFX942-NEXT:    ; use s[8:9]7108; GFX942-NEXT:    ;;#ASMEND7109; GFX942-NEXT:    s_setpc_b64 s[30:31]7110  %vec0 = call <4 x i16> asm "; def $0", "=s"()7111  %vec1 = call <4 x i16> asm "; def $0", "=s"()7112  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7113  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7114  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 2>7115  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7116  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7117  ret void7118}7119 7120define void @s_shuffle_v3i16_v3i16__5_1_2() {7121; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_2:7122; GFX900:       ; %bb.0:7123; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7124; GFX900-NEXT:    ;;#ASMSTART7125; GFX900-NEXT:    ; def s[8:9]7126; GFX900-NEXT:    ;;#ASMEND7127; GFX900-NEXT:    ;;#ASMSTART7128; GFX900-NEXT:    ; def s[4:5]7129; GFX900-NEXT:    ;;#ASMEND7130; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s87131; GFX900-NEXT:    ;;#ASMSTART7132; GFX900-NEXT:    ; use s[8:9]7133; GFX900-NEXT:    ;;#ASMEND7134; GFX900-NEXT:    s_setpc_b64 s[30:31]7135;7136; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_2:7137; GFX90A:       ; %bb.0:7138; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7139; GFX90A-NEXT:    ;;#ASMSTART7140; GFX90A-NEXT:    ; def s[8:9]7141; GFX90A-NEXT:    ;;#ASMEND7142; GFX90A-NEXT:    ;;#ASMSTART7143; GFX90A-NEXT:    ; def s[4:5]7144; GFX90A-NEXT:    ;;#ASMEND7145; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s87146; GFX90A-NEXT:    ;;#ASMSTART7147; GFX90A-NEXT:    ; use s[8:9]7148; GFX90A-NEXT:    ;;#ASMEND7149; GFX90A-NEXT:    s_setpc_b64 s[30:31]7150;7151; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_2:7152; GFX942:       ; %bb.0:7153; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7154; GFX942-NEXT:    ;;#ASMSTART7155; GFX942-NEXT:    ; def s[8:9]7156; GFX942-NEXT:    ;;#ASMEND7157; GFX942-NEXT:    ;;#ASMSTART7158; GFX942-NEXT:    ; def s[0:1]7159; GFX942-NEXT:    ;;#ASMEND7160; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s87161; GFX942-NEXT:    ;;#ASMSTART7162; GFX942-NEXT:    ; use s[8:9]7163; GFX942-NEXT:    ;;#ASMEND7164; GFX942-NEXT:    s_setpc_b64 s[30:31]7165  %vec0 = call <4 x i16> asm "; def $0", "=s"()7166  %vec1 = call <4 x i16> asm "; def $0", "=s"()7167  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7168  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7169  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 2>7170  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7171  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7172  ret void7173}7174 7175define void @s_shuffle_v3i16_v3i16__5_3_2() {7176; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_2:7177; GFX900:       ; %bb.0:7178; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7179; GFX900-NEXT:    ;;#ASMSTART7180; GFX900-NEXT:    ; def s[8:9]7181; GFX900-NEXT:    ;;#ASMEND7182; GFX900-NEXT:    ;;#ASMSTART7183; GFX900-NEXT:    ; def s[4:5]7184; GFX900-NEXT:    ;;#ASMEND7185; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s47186; GFX900-NEXT:    ;;#ASMSTART7187; GFX900-NEXT:    ; use s[8:9]7188; GFX900-NEXT:    ;;#ASMEND7189; GFX900-NEXT:    s_setpc_b64 s[30:31]7190;7191; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_2:7192; GFX90A:       ; %bb.0:7193; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7194; GFX90A-NEXT:    ;;#ASMSTART7195; GFX90A-NEXT:    ; def s[8:9]7196; GFX90A-NEXT:    ;;#ASMEND7197; GFX90A-NEXT:    ;;#ASMSTART7198; GFX90A-NEXT:    ; def s[4:5]7199; GFX90A-NEXT:    ;;#ASMEND7200; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s47201; GFX90A-NEXT:    ;;#ASMSTART7202; GFX90A-NEXT:    ; use s[8:9]7203; GFX90A-NEXT:    ;;#ASMEND7204; GFX90A-NEXT:    s_setpc_b64 s[30:31]7205;7206; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_2:7207; GFX942:       ; %bb.0:7208; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7209; GFX942-NEXT:    ;;#ASMSTART7210; GFX942-NEXT:    ; def s[8:9]7211; GFX942-NEXT:    ;;#ASMEND7212; GFX942-NEXT:    ;;#ASMSTART7213; GFX942-NEXT:    ; def s[0:1]7214; GFX942-NEXT:    ;;#ASMEND7215; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s07216; GFX942-NEXT:    ;;#ASMSTART7217; GFX942-NEXT:    ; use s[8:9]7218; GFX942-NEXT:    ;;#ASMEND7219; GFX942-NEXT:    s_setpc_b64 s[30:31]7220  %vec0 = call <4 x i16> asm "; def $0", "=s"()7221  %vec1 = call <4 x i16> asm "; def $0", "=s"()7222  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7223  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7224  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 2>7225  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7226  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7227  ret void7228}7229 7230define void @s_shuffle_v3i16_v3i16__5_4_2() {7231; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_2:7232; GFX900:       ; %bb.0:7233; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7234; GFX900-NEXT:    ;;#ASMSTART7235; GFX900-NEXT:    ; def s[8:9]7236; GFX900-NEXT:    ;;#ASMEND7237; GFX900-NEXT:    ;;#ASMSTART7238; GFX900-NEXT:    ; def s[4:5]7239; GFX900-NEXT:    ;;#ASMEND7240; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s47241; GFX900-NEXT:    ;;#ASMSTART7242; GFX900-NEXT:    ; use s[8:9]7243; GFX900-NEXT:    ;;#ASMEND7244; GFX900-NEXT:    s_setpc_b64 s[30:31]7245;7246; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_2:7247; GFX90A:       ; %bb.0:7248; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7249; GFX90A-NEXT:    ;;#ASMSTART7250; GFX90A-NEXT:    ; def s[8:9]7251; GFX90A-NEXT:    ;;#ASMEND7252; GFX90A-NEXT:    ;;#ASMSTART7253; GFX90A-NEXT:    ; def s[4:5]7254; GFX90A-NEXT:    ;;#ASMEND7255; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s47256; GFX90A-NEXT:    ;;#ASMSTART7257; GFX90A-NEXT:    ; use s[8:9]7258; GFX90A-NEXT:    ;;#ASMEND7259; GFX90A-NEXT:    s_setpc_b64 s[30:31]7260;7261; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_2:7262; GFX942:       ; %bb.0:7263; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7264; GFX942-NEXT:    ;;#ASMSTART7265; GFX942-NEXT:    ; def s[8:9]7266; GFX942-NEXT:    ;;#ASMEND7267; GFX942-NEXT:    ;;#ASMSTART7268; GFX942-NEXT:    ; def s[0:1]7269; GFX942-NEXT:    ;;#ASMEND7270; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s07271; GFX942-NEXT:    ;;#ASMSTART7272; GFX942-NEXT:    ; use s[8:9]7273; GFX942-NEXT:    ;;#ASMEND7274; GFX942-NEXT:    s_setpc_b64 s[30:31]7275  %vec0 = call <4 x i16> asm "; def $0", "=s"()7276  %vec1 = call <4 x i16> asm "; def $0", "=s"()7277  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7278  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7279  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 2>7280  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7281  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7282  ret void7283}7284 7285define void @s_shuffle_v3i16_v3i16__u_3_3() {7286; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_3_3:7287; GFX9:       ; %bb.0:7288; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7289; GFX9-NEXT:    ;;#ASMSTART7290; GFX9-NEXT:    ; use s[8:9]7291; GFX9-NEXT:    ;;#ASMEND7292; GFX9-NEXT:    s_setpc_b64 s[30:31]7293  %vec0 = call <4 x i16> asm "; def $0", "=s"()7294  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7295  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 poison, i32 3, i32 3>7296  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7297  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7298  ret void7299}7300 7301define void @s_shuffle_v3i16_v3i16__0_3_3() {7302; GFX900-LABEL: s_shuffle_v3i16_v3i16__0_3_3:7303; GFX900:       ; %bb.0:7304; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7305; GFX900-NEXT:    ;;#ASMSTART7306; GFX900-NEXT:    ; def s[8:9]7307; GFX900-NEXT:    ;;#ASMEND7308; GFX900-NEXT:    ;;#ASMSTART7309; GFX900-NEXT:    ; use s[8:9]7310; GFX900-NEXT:    ;;#ASMEND7311; GFX900-NEXT:    s_setpc_b64 s[30:31]7312;7313; GFX90A-LABEL: s_shuffle_v3i16_v3i16__0_3_3:7314; GFX90A:       ; %bb.0:7315; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7316; GFX90A-NEXT:    ;;#ASMSTART7317; GFX90A-NEXT:    ; def s[8:9]7318; GFX90A-NEXT:    ;;#ASMEND7319; GFX90A-NEXT:    ;;#ASMSTART7320; GFX90A-NEXT:    ; use s[8:9]7321; GFX90A-NEXT:    ;;#ASMEND7322; GFX90A-NEXT:    s_setpc_b64 s[30:31]7323;7324; GFX942-LABEL: s_shuffle_v3i16_v3i16__0_3_3:7325; GFX942:       ; %bb.0:7326; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7327; GFX942-NEXT:    ;;#ASMSTART7328; GFX942-NEXT:    ; def s[8:9]7329; GFX942-NEXT:    ;;#ASMEND7330; GFX942-NEXT:    s_nop 07331; GFX942-NEXT:    ;;#ASMSTART7332; GFX942-NEXT:    ; use s[8:9]7333; GFX942-NEXT:    ;;#ASMEND7334; GFX942-NEXT:    s_setpc_b64 s[30:31]7335  %vec0 = call <4 x i16> asm "; def $0", "=s"()7336  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7337  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 0, i32 3, i32 3>7338  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7339  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7340  ret void7341}7342 7343define void @s_shuffle_v3i16_v3i16__1_3_3() {7344; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_3_3:7345; GFX900:       ; %bb.0:7346; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7347; GFX900-NEXT:    ;;#ASMSTART7348; GFX900-NEXT:    ; def s[4:5]7349; GFX900-NEXT:    ;;#ASMEND7350; GFX900-NEXT:    s_lshr_b32 s8, s4, 167351; GFX900-NEXT:    ;;#ASMSTART7352; GFX900-NEXT:    ; use s[8:9]7353; GFX900-NEXT:    ;;#ASMEND7354; GFX900-NEXT:    s_setpc_b64 s[30:31]7355;7356; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_3_3:7357; GFX90A:       ; %bb.0:7358; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7359; GFX90A-NEXT:    ;;#ASMSTART7360; GFX90A-NEXT:    ; def s[4:5]7361; GFX90A-NEXT:    ;;#ASMEND7362; GFX90A-NEXT:    s_lshr_b32 s8, s4, 167363; GFX90A-NEXT:    ;;#ASMSTART7364; GFX90A-NEXT:    ; use s[8:9]7365; GFX90A-NEXT:    ;;#ASMEND7366; GFX90A-NEXT:    s_setpc_b64 s[30:31]7367;7368; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_3_3:7369; GFX942:       ; %bb.0:7370; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7371; GFX942-NEXT:    ;;#ASMSTART7372; GFX942-NEXT:    ; def s[0:1]7373; GFX942-NEXT:    ;;#ASMEND7374; GFX942-NEXT:    s_lshr_b32 s8, s0, 167375; GFX942-NEXT:    ;;#ASMSTART7376; GFX942-NEXT:    ; use s[8:9]7377; GFX942-NEXT:    ;;#ASMEND7378; GFX942-NEXT:    s_setpc_b64 s[30:31]7379  %vec0 = call <4 x i16> asm "; def $0", "=s"()7380  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7381  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 1, i32 3, i32 3>7382  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7383  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7384  ret void7385}7386 7387define void @s_shuffle_v3i16_v3i16__2_3_3() {7388; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_3_3:7389; GFX900:       ; %bb.0:7390; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7391; GFX900-NEXT:    ;;#ASMSTART7392; GFX900-NEXT:    ; def s[4:5]7393; GFX900-NEXT:    ;;#ASMEND7394; GFX900-NEXT:    s_mov_b32 s8, s57395; GFX900-NEXT:    ;;#ASMSTART7396; GFX900-NEXT:    ; use s[8:9]7397; GFX900-NEXT:    ;;#ASMEND7398; GFX900-NEXT:    s_setpc_b64 s[30:31]7399;7400; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_3_3:7401; GFX90A:       ; %bb.0:7402; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7403; GFX90A-NEXT:    ;;#ASMSTART7404; GFX90A-NEXT:    ; def s[4:5]7405; GFX90A-NEXT:    ;;#ASMEND7406; GFX90A-NEXT:    s_mov_b32 s8, s57407; GFX90A-NEXT:    ;;#ASMSTART7408; GFX90A-NEXT:    ; use s[8:9]7409; GFX90A-NEXT:    ;;#ASMEND7410; GFX90A-NEXT:    s_setpc_b64 s[30:31]7411;7412; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_3_3:7413; GFX942:       ; %bb.0:7414; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7415; GFX942-NEXT:    ;;#ASMSTART7416; GFX942-NEXT:    ; def s[0:1]7417; GFX942-NEXT:    ;;#ASMEND7418; GFX942-NEXT:    s_mov_b32 s8, s17419; GFX942-NEXT:    ;;#ASMSTART7420; GFX942-NEXT:    ; use s[8:9]7421; GFX942-NEXT:    ;;#ASMEND7422; GFX942-NEXT:    s_setpc_b64 s[30:31]7423  %vec0 = call <4 x i16> asm "; def $0", "=s"()7424  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7425  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 2, i32 3, i32 3>7426  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7427  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7428  ret void7429}7430 7431define void @s_shuffle_v3i16_v3i16__3_3_3() {7432; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_3_3:7433; GFX9:       ; %bb.0:7434; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7435; GFX9-NEXT:    ;;#ASMSTART7436; GFX9-NEXT:    ; use s[8:9]7437; GFX9-NEXT:    ;;#ASMEND7438; GFX9-NEXT:    s_setpc_b64 s[30:31]7439  %vec0 = call <4 x i16> asm "; def $0", "=s"()7440  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7441  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <3 x i32> <i32 3, i32 3, i32 3>7442  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7443  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7444  ret void7445}7446 7447define void @s_shuffle_v3i16_v3i16__4_3_3() {7448; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_3_3:7449; GFX900:       ; %bb.0:7450; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7451; GFX900-NEXT:    ;;#ASMSTART7452; GFX900-NEXT:    ; def s[4:5]7453; GFX900-NEXT:    ;;#ASMEND7454; GFX900-NEXT:    s_lshr_b32 s5, s4, 167455; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s47456; GFX900-NEXT:    s_mov_b32 s9, s47457; GFX900-NEXT:    ;;#ASMSTART7458; GFX900-NEXT:    ; use s[8:9]7459; GFX900-NEXT:    ;;#ASMEND7460; GFX900-NEXT:    s_setpc_b64 s[30:31]7461;7462; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_3_3:7463; GFX90A:       ; %bb.0:7464; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7465; GFX90A-NEXT:    ;;#ASMSTART7466; GFX90A-NEXT:    ; def s[4:5]7467; GFX90A-NEXT:    ;;#ASMEND7468; GFX90A-NEXT:    s_lshr_b32 s5, s4, 167469; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s47470; GFX90A-NEXT:    s_mov_b32 s9, s47471; GFX90A-NEXT:    ;;#ASMSTART7472; GFX90A-NEXT:    ; use s[8:9]7473; GFX90A-NEXT:    ;;#ASMEND7474; GFX90A-NEXT:    s_setpc_b64 s[30:31]7475;7476; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_3_3:7477; GFX942:       ; %bb.0:7478; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7479; GFX942-NEXT:    ;;#ASMSTART7480; GFX942-NEXT:    ; def s[0:1]7481; GFX942-NEXT:    ;;#ASMEND7482; GFX942-NEXT:    s_lshr_b32 s1, s0, 167483; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s07484; GFX942-NEXT:    s_mov_b32 s9, s07485; GFX942-NEXT:    ;;#ASMSTART7486; GFX942-NEXT:    ; use s[8:9]7487; GFX942-NEXT:    ;;#ASMEND7488; GFX942-NEXT:    s_setpc_b64 s[30:31]7489  %vec0 = call <4 x i16> asm "; def $0", "=s"()7490  %vec1 = call <4 x i16> asm "; def $0", "=s"()7491  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7492  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7493  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 3, i32 3>7494  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7495  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7496  ret void7497}7498 7499define void @s_shuffle_v3i16_v3i16__5_3_3() {7500; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_3:7501; GFX900:       ; %bb.0:7502; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7503; GFX900-NEXT:    ;;#ASMSTART7504; GFX900-NEXT:    ; def s[4:5]7505; GFX900-NEXT:    ;;#ASMEND7506; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s47507; GFX900-NEXT:    s_mov_b32 s9, s47508; GFX900-NEXT:    ;;#ASMSTART7509; GFX900-NEXT:    ; use s[8:9]7510; GFX900-NEXT:    ;;#ASMEND7511; GFX900-NEXT:    s_setpc_b64 s[30:31]7512;7513; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_3:7514; GFX90A:       ; %bb.0:7515; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7516; GFX90A-NEXT:    ;;#ASMSTART7517; GFX90A-NEXT:    ; def s[4:5]7518; GFX90A-NEXT:    ;;#ASMEND7519; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s47520; GFX90A-NEXT:    s_mov_b32 s9, s47521; GFX90A-NEXT:    ;;#ASMSTART7522; GFX90A-NEXT:    ; use s[8:9]7523; GFX90A-NEXT:    ;;#ASMEND7524; GFX90A-NEXT:    s_setpc_b64 s[30:31]7525;7526; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_3:7527; GFX942:       ; %bb.0:7528; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7529; GFX942-NEXT:    ;;#ASMSTART7530; GFX942-NEXT:    ; def s[0:1]7531; GFX942-NEXT:    ;;#ASMEND7532; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s07533; GFX942-NEXT:    s_mov_b32 s9, s07534; GFX942-NEXT:    ;;#ASMSTART7535; GFX942-NEXT:    ; use s[8:9]7536; GFX942-NEXT:    ;;#ASMEND7537; GFX942-NEXT:    s_setpc_b64 s[30:31]7538  %vec0 = call <4 x i16> asm "; def $0", "=s"()7539  %vec1 = call <4 x i16> asm "; def $0", "=s"()7540  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7541  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7542  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 3>7543  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7544  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7545  ret void7546}7547 7548define void @s_shuffle_v3i16_v3i16__5_u_3() {7549; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_3:7550; GFX900:       ; %bb.0:7551; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7552; GFX900-NEXT:    ;;#ASMSTART7553; GFX900-NEXT:    ; def s[4:5]7554; GFX900-NEXT:    ;;#ASMEND7555; GFX900-NEXT:    s_mov_b32 s8, s57556; GFX900-NEXT:    s_mov_b32 s9, s47557; GFX900-NEXT:    ;;#ASMSTART7558; GFX900-NEXT:    ; use s[8:9]7559; GFX900-NEXT:    ;;#ASMEND7560; GFX900-NEXT:    s_setpc_b64 s[30:31]7561;7562; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_3:7563; GFX90A:       ; %bb.0:7564; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7565; GFX90A-NEXT:    ;;#ASMSTART7566; GFX90A-NEXT:    ; def s[4:5]7567; GFX90A-NEXT:    ;;#ASMEND7568; GFX90A-NEXT:    s_mov_b32 s8, s57569; GFX90A-NEXT:    s_mov_b32 s9, s47570; GFX90A-NEXT:    ;;#ASMSTART7571; GFX90A-NEXT:    ; use s[8:9]7572; GFX90A-NEXT:    ;;#ASMEND7573; GFX90A-NEXT:    s_setpc_b64 s[30:31]7574;7575; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_3:7576; GFX942:       ; %bb.0:7577; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7578; GFX942-NEXT:    ;;#ASMSTART7579; GFX942-NEXT:    ; def s[0:1]7580; GFX942-NEXT:    ;;#ASMEND7581; GFX942-NEXT:    s_mov_b32 s8, s17582; GFX942-NEXT:    s_mov_b32 s9, s07583; GFX942-NEXT:    ;;#ASMSTART7584; GFX942-NEXT:    ; use s[8:9]7585; GFX942-NEXT:    ;;#ASMEND7586; GFX942-NEXT:    s_setpc_b64 s[30:31]7587  %vec0 = call <4 x i16> asm "; def $0", "=s"()7588  %vec1 = call <4 x i16> asm "; def $0", "=s"()7589  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7590  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7591  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 3>7592  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7593  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7594  ret void7595}7596 7597define void @s_shuffle_v3i16_v3i16__5_0_3() {7598; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_3:7599; GFX900:       ; %bb.0:7600; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7601; GFX900-NEXT:    ;;#ASMSTART7602; GFX900-NEXT:    ; def s[4:5]7603; GFX900-NEXT:    ;;#ASMEND7604; GFX900-NEXT:    ;;#ASMSTART7605; GFX900-NEXT:    ; def s[6:7]7606; GFX900-NEXT:    ;;#ASMEND7607; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s47608; GFX900-NEXT:    s_mov_b32 s9, s67609; GFX900-NEXT:    ;;#ASMSTART7610; GFX900-NEXT:    ; use s[8:9]7611; GFX900-NEXT:    ;;#ASMEND7612; GFX900-NEXT:    s_setpc_b64 s[30:31]7613;7614; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_3:7615; GFX90A:       ; %bb.0:7616; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7617; GFX90A-NEXT:    ;;#ASMSTART7618; GFX90A-NEXT:    ; def s[4:5]7619; GFX90A-NEXT:    ;;#ASMEND7620; GFX90A-NEXT:    ;;#ASMSTART7621; GFX90A-NEXT:    ; def s[6:7]7622; GFX90A-NEXT:    ;;#ASMEND7623; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s47624; GFX90A-NEXT:    s_mov_b32 s9, s67625; GFX90A-NEXT:    ;;#ASMSTART7626; GFX90A-NEXT:    ; use s[8:9]7627; GFX90A-NEXT:    ;;#ASMEND7628; GFX90A-NEXT:    s_setpc_b64 s[30:31]7629;7630; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_3:7631; GFX942:       ; %bb.0:7632; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7633; GFX942-NEXT:    ;;#ASMSTART7634; GFX942-NEXT:    ; def s[0:1]7635; GFX942-NEXT:    ;;#ASMEND7636; GFX942-NEXT:    ;;#ASMSTART7637; GFX942-NEXT:    ; def s[2:3]7638; GFX942-NEXT:    ;;#ASMEND7639; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s07640; GFX942-NEXT:    s_mov_b32 s9, s27641; GFX942-NEXT:    ;;#ASMSTART7642; GFX942-NEXT:    ; use s[8:9]7643; GFX942-NEXT:    ;;#ASMEND7644; GFX942-NEXT:    s_setpc_b64 s[30:31]7645  %vec0 = call <4 x i16> asm "; def $0", "=s"()7646  %vec1 = call <4 x i16> asm "; def $0", "=s"()7647  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7648  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7649  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 3>7650  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7651  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7652  ret void7653}7654 7655define void @s_shuffle_v3i16_v3i16__5_1_3() {7656; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_3:7657; GFX900:       ; %bb.0:7658; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7659; GFX900-NEXT:    ;;#ASMSTART7660; GFX900-NEXT:    ; def s[4:5]7661; GFX900-NEXT:    ;;#ASMEND7662; GFX900-NEXT:    ;;#ASMSTART7663; GFX900-NEXT:    ; def s[6:7]7664; GFX900-NEXT:    ;;#ASMEND7665; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s47666; GFX900-NEXT:    s_mov_b32 s9, s67667; GFX900-NEXT:    ;;#ASMSTART7668; GFX900-NEXT:    ; use s[8:9]7669; GFX900-NEXT:    ;;#ASMEND7670; GFX900-NEXT:    s_setpc_b64 s[30:31]7671;7672; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_3:7673; GFX90A:       ; %bb.0:7674; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7675; GFX90A-NEXT:    ;;#ASMSTART7676; GFX90A-NEXT:    ; def s[4:5]7677; GFX90A-NEXT:    ;;#ASMEND7678; GFX90A-NEXT:    ;;#ASMSTART7679; GFX90A-NEXT:    ; def s[6:7]7680; GFX90A-NEXT:    ;;#ASMEND7681; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s47682; GFX90A-NEXT:    s_mov_b32 s9, s67683; GFX90A-NEXT:    ;;#ASMSTART7684; GFX90A-NEXT:    ; use s[8:9]7685; GFX90A-NEXT:    ;;#ASMEND7686; GFX90A-NEXT:    s_setpc_b64 s[30:31]7687;7688; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_3:7689; GFX942:       ; %bb.0:7690; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7691; GFX942-NEXT:    ;;#ASMSTART7692; GFX942-NEXT:    ; def s[0:1]7693; GFX942-NEXT:    ;;#ASMEND7694; GFX942-NEXT:    ;;#ASMSTART7695; GFX942-NEXT:    ; def s[2:3]7696; GFX942-NEXT:    ;;#ASMEND7697; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s07698; GFX942-NEXT:    s_mov_b32 s9, s27699; GFX942-NEXT:    ;;#ASMSTART7700; GFX942-NEXT:    ; use s[8:9]7701; GFX942-NEXT:    ;;#ASMEND7702; GFX942-NEXT:    s_setpc_b64 s[30:31]7703  %vec0 = call <4 x i16> asm "; def $0", "=s"()7704  %vec1 = call <4 x i16> asm "; def $0", "=s"()7705  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7706  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7707  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 3>7708  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7709  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7710  ret void7711}7712 7713define void @s_shuffle_v3i16_v3i16__5_2_3() {7714; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_3:7715; GFX900:       ; %bb.0:7716; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7717; GFX900-NEXT:    ;;#ASMSTART7718; GFX900-NEXT:    ; def s[4:5]7719; GFX900-NEXT:    ;;#ASMEND7720; GFX900-NEXT:    ;;#ASMSTART7721; GFX900-NEXT:    ; def s[6:7]7722; GFX900-NEXT:    ;;#ASMEND7723; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s57724; GFX900-NEXT:    s_mov_b32 s9, s67725; GFX900-NEXT:    ;;#ASMSTART7726; GFX900-NEXT:    ; use s[8:9]7727; GFX900-NEXT:    ;;#ASMEND7728; GFX900-NEXT:    s_setpc_b64 s[30:31]7729;7730; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_3:7731; GFX90A:       ; %bb.0:7732; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7733; GFX90A-NEXT:    ;;#ASMSTART7734; GFX90A-NEXT:    ; def s[4:5]7735; GFX90A-NEXT:    ;;#ASMEND7736; GFX90A-NEXT:    ;;#ASMSTART7737; GFX90A-NEXT:    ; def s[6:7]7738; GFX90A-NEXT:    ;;#ASMEND7739; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s57740; GFX90A-NEXT:    s_mov_b32 s9, s67741; GFX90A-NEXT:    ;;#ASMSTART7742; GFX90A-NEXT:    ; use s[8:9]7743; GFX90A-NEXT:    ;;#ASMEND7744; GFX90A-NEXT:    s_setpc_b64 s[30:31]7745;7746; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_3:7747; GFX942:       ; %bb.0:7748; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7749; GFX942-NEXT:    ;;#ASMSTART7750; GFX942-NEXT:    ; def s[0:1]7751; GFX942-NEXT:    ;;#ASMEND7752; GFX942-NEXT:    ;;#ASMSTART7753; GFX942-NEXT:    ; def s[2:3]7754; GFX942-NEXT:    ;;#ASMEND7755; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s17756; GFX942-NEXT:    s_mov_b32 s9, s27757; GFX942-NEXT:    ;;#ASMSTART7758; GFX942-NEXT:    ; use s[8:9]7759; GFX942-NEXT:    ;;#ASMEND7760; GFX942-NEXT:    s_setpc_b64 s[30:31]7761  %vec0 = call <4 x i16> asm "; def $0", "=s"()7762  %vec1 = call <4 x i16> asm "; def $0", "=s"()7763  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7764  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7765  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 3>7766  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7767  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7768  ret void7769}7770 7771define void @s_shuffle_v3i16_v3i16__5_4_3() {7772; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_3:7773; GFX900:       ; %bb.0:7774; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7775; GFX900-NEXT:    ;;#ASMSTART7776; GFX900-NEXT:    ; def s[4:5]7777; GFX900-NEXT:    ;;#ASMEND7778; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s47779; GFX900-NEXT:    s_mov_b32 s9, s47780; GFX900-NEXT:    ;;#ASMSTART7781; GFX900-NEXT:    ; use s[8:9]7782; GFX900-NEXT:    ;;#ASMEND7783; GFX900-NEXT:    s_setpc_b64 s[30:31]7784;7785; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_3:7786; GFX90A:       ; %bb.0:7787; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7788; GFX90A-NEXT:    ;;#ASMSTART7789; GFX90A-NEXT:    ; def s[4:5]7790; GFX90A-NEXT:    ;;#ASMEND7791; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s47792; GFX90A-NEXT:    s_mov_b32 s9, s47793; GFX90A-NEXT:    ;;#ASMSTART7794; GFX90A-NEXT:    ; use s[8:9]7795; GFX90A-NEXT:    ;;#ASMEND7796; GFX90A-NEXT:    s_setpc_b64 s[30:31]7797;7798; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_3:7799; GFX942:       ; %bb.0:7800; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7801; GFX942-NEXT:    ;;#ASMSTART7802; GFX942-NEXT:    ; def s[0:1]7803; GFX942-NEXT:    ;;#ASMEND7804; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s07805; GFX942-NEXT:    s_mov_b32 s9, s07806; GFX942-NEXT:    ;;#ASMSTART7807; GFX942-NEXT:    ; use s[8:9]7808; GFX942-NEXT:    ;;#ASMEND7809; GFX942-NEXT:    s_setpc_b64 s[30:31]7810  %vec0 = call <4 x i16> asm "; def $0", "=s"()7811  %vec1 = call <4 x i16> asm "; def $0", "=s"()7812  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7813  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7814  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 3>7815  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7816  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7817  ret void7818}7819 7820define void @s_shuffle_v3i16_v3i16__u_4_4() {7821; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_4_4:7822; GFX9:       ; %bb.0:7823; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7824; GFX9-NEXT:    ;;#ASMSTART7825; GFX9-NEXT:    ; def s[8:9]7826; GFX9-NEXT:    ;;#ASMEND7827; GFX9-NEXT:    s_lshr_b32 s9, s8, 167828; GFX9-NEXT:    ;;#ASMSTART7829; GFX9-NEXT:    ; use s[8:9]7830; GFX9-NEXT:    ;;#ASMEND7831; GFX9-NEXT:    s_setpc_b64 s[30:31]7832  %vec0 = call <4 x i16> asm "; def $0", "=s"()7833  %vec1 = call <4 x i16> asm "; def $0", "=s"()7834  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7835  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7836  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 poison, i32 4, i32 4>7837  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7838  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7839  ret void7840}7841 7842define void @s_shuffle_v3i16_v3i16__0_4_4() {7843; GFX900-LABEL: s_shuffle_v3i16_v3i16__0_4_4:7844; GFX900:       ; %bb.0:7845; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7846; GFX900-NEXT:    ;;#ASMSTART7847; GFX900-NEXT:    ; def s[4:5]7848; GFX900-NEXT:    ;;#ASMEND7849; GFX900-NEXT:    ;;#ASMSTART7850; GFX900-NEXT:    ; def s[6:7]7851; GFX900-NEXT:    ;;#ASMEND7852; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s4, s67853; GFX900-NEXT:    s_lshr_b32 s9, s6, 167854; GFX900-NEXT:    ;;#ASMSTART7855; GFX900-NEXT:    ; use s[8:9]7856; GFX900-NEXT:    ;;#ASMEND7857; GFX900-NEXT:    s_setpc_b64 s[30:31]7858;7859; GFX90A-LABEL: s_shuffle_v3i16_v3i16__0_4_4:7860; GFX90A:       ; %bb.0:7861; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7862; GFX90A-NEXT:    ;;#ASMSTART7863; GFX90A-NEXT:    ; def s[4:5]7864; GFX90A-NEXT:    ;;#ASMEND7865; GFX90A-NEXT:    ;;#ASMSTART7866; GFX90A-NEXT:    ; def s[6:7]7867; GFX90A-NEXT:    ;;#ASMEND7868; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s4, s67869; GFX90A-NEXT:    s_lshr_b32 s9, s6, 167870; GFX90A-NEXT:    ;;#ASMSTART7871; GFX90A-NEXT:    ; use s[8:9]7872; GFX90A-NEXT:    ;;#ASMEND7873; GFX90A-NEXT:    s_setpc_b64 s[30:31]7874;7875; GFX942-LABEL: s_shuffle_v3i16_v3i16__0_4_4:7876; GFX942:       ; %bb.0:7877; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7878; GFX942-NEXT:    ;;#ASMSTART7879; GFX942-NEXT:    ; def s[0:1]7880; GFX942-NEXT:    ;;#ASMEND7881; GFX942-NEXT:    ;;#ASMSTART7882; GFX942-NEXT:    ; def s[2:3]7883; GFX942-NEXT:    ;;#ASMEND7884; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s0, s27885; GFX942-NEXT:    s_lshr_b32 s9, s2, 167886; GFX942-NEXT:    ;;#ASMSTART7887; GFX942-NEXT:    ; use s[8:9]7888; GFX942-NEXT:    ;;#ASMEND7889; GFX942-NEXT:    s_setpc_b64 s[30:31]7890  %vec0 = call <4 x i16> asm "; def $0", "=s"()7891  %vec1 = call <4 x i16> asm "; def $0", "=s"()7892  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7893  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7894  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 0, i32 4, i32 4>7895  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7896  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7897  ret void7898}7899 7900define void @s_shuffle_v3i16_v3i16__1_4_4() {7901; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_4_4:7902; GFX900:       ; %bb.0:7903; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7904; GFX900-NEXT:    ;;#ASMSTART7905; GFX900-NEXT:    ; def s[4:5]7906; GFX900-NEXT:    ;;#ASMEND7907; GFX900-NEXT:    ;;#ASMSTART7908; GFX900-NEXT:    ; def s[6:7]7909; GFX900-NEXT:    ;;#ASMEND7910; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s67911; GFX900-NEXT:    s_lshr_b32 s9, s6, 167912; GFX900-NEXT:    ;;#ASMSTART7913; GFX900-NEXT:    ; use s[8:9]7914; GFX900-NEXT:    ;;#ASMEND7915; GFX900-NEXT:    s_setpc_b64 s[30:31]7916;7917; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_4_4:7918; GFX90A:       ; %bb.0:7919; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7920; GFX90A-NEXT:    ;;#ASMSTART7921; GFX90A-NEXT:    ; def s[4:5]7922; GFX90A-NEXT:    ;;#ASMEND7923; GFX90A-NEXT:    ;;#ASMSTART7924; GFX90A-NEXT:    ; def s[6:7]7925; GFX90A-NEXT:    ;;#ASMEND7926; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s67927; GFX90A-NEXT:    s_lshr_b32 s9, s6, 167928; GFX90A-NEXT:    ;;#ASMSTART7929; GFX90A-NEXT:    ; use s[8:9]7930; GFX90A-NEXT:    ;;#ASMEND7931; GFX90A-NEXT:    s_setpc_b64 s[30:31]7932;7933; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_4_4:7934; GFX942:       ; %bb.0:7935; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7936; GFX942-NEXT:    ;;#ASMSTART7937; GFX942-NEXT:    ; def s[0:1]7938; GFX942-NEXT:    ;;#ASMEND7939; GFX942-NEXT:    ;;#ASMSTART7940; GFX942-NEXT:    ; def s[2:3]7941; GFX942-NEXT:    ;;#ASMEND7942; GFX942-NEXT:    s_pack_hh_b32_b16 s8, s0, s27943; GFX942-NEXT:    s_lshr_b32 s9, s2, 167944; GFX942-NEXT:    ;;#ASMSTART7945; GFX942-NEXT:    ; use s[8:9]7946; GFX942-NEXT:    ;;#ASMEND7947; GFX942-NEXT:    s_setpc_b64 s[30:31]7948  %vec0 = call <4 x i16> asm "; def $0", "=s"()7949  %vec1 = call <4 x i16> asm "; def $0", "=s"()7950  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7951  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7952  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 1, i32 4, i32 4>7953  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7954  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)7955  ret void7956}7957 7958define void @s_shuffle_v3i16_v3i16__2_4_4() {7959; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_4_4:7960; GFX900:       ; %bb.0:7961; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7962; GFX900-NEXT:    ;;#ASMSTART7963; GFX900-NEXT:    ; def s[4:5]7964; GFX900-NEXT:    ;;#ASMEND7965; GFX900-NEXT:    ;;#ASMSTART7966; GFX900-NEXT:    ; def s[6:7]7967; GFX900-NEXT:    ;;#ASMEND7968; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s67969; GFX900-NEXT:    s_lshr_b32 s9, s6, 167970; GFX900-NEXT:    ;;#ASMSTART7971; GFX900-NEXT:    ; use s[8:9]7972; GFX900-NEXT:    ;;#ASMEND7973; GFX900-NEXT:    s_setpc_b64 s[30:31]7974;7975; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_4_4:7976; GFX90A:       ; %bb.0:7977; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7978; GFX90A-NEXT:    ;;#ASMSTART7979; GFX90A-NEXT:    ; def s[4:5]7980; GFX90A-NEXT:    ;;#ASMEND7981; GFX90A-NEXT:    ;;#ASMSTART7982; GFX90A-NEXT:    ; def s[6:7]7983; GFX90A-NEXT:    ;;#ASMEND7984; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s67985; GFX90A-NEXT:    s_lshr_b32 s9, s6, 167986; GFX90A-NEXT:    ;;#ASMSTART7987; GFX90A-NEXT:    ; use s[8:9]7988; GFX90A-NEXT:    ;;#ASMEND7989; GFX90A-NEXT:    s_setpc_b64 s[30:31]7990;7991; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_4_4:7992; GFX942:       ; %bb.0:7993; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7994; GFX942-NEXT:    ;;#ASMSTART7995; GFX942-NEXT:    ; def s[0:1]7996; GFX942-NEXT:    ;;#ASMEND7997; GFX942-NEXT:    ;;#ASMSTART7998; GFX942-NEXT:    ; def s[2:3]7999; GFX942-NEXT:    ;;#ASMEND8000; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s28001; GFX942-NEXT:    s_lshr_b32 s9, s2, 168002; GFX942-NEXT:    ;;#ASMSTART8003; GFX942-NEXT:    ; use s[8:9]8004; GFX942-NEXT:    ;;#ASMEND8005; GFX942-NEXT:    s_setpc_b64 s[30:31]8006  %vec0 = call <4 x i16> asm "; def $0", "=s"()8007  %vec1 = call <4 x i16> asm "; def $0", "=s"()8008  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8009  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8010  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 2, i32 4, i32 4>8011  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8012  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8013  ret void8014}8015 8016define void @s_shuffle_v3i16_v3i16__3_4_4() {8017; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_4_4:8018; GFX9:       ; %bb.0:8019; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8020; GFX9-NEXT:    ;;#ASMSTART8021; GFX9-NEXT:    ; def s[8:9]8022; GFX9-NEXT:    ;;#ASMEND8023; GFX9-NEXT:    s_lshr_b32 s9, s8, 168024; GFX9-NEXT:    ;;#ASMSTART8025; GFX9-NEXT:    ; use s[8:9]8026; GFX9-NEXT:    ;;#ASMEND8027; GFX9-NEXT:    s_setpc_b64 s[30:31]8028  %vec0 = call <4 x i16> asm "; def $0", "=s"()8029  %vec1 = call <4 x i16> asm "; def $0", "=s"()8030  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8031  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8032  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 3, i32 4, i32 4>8033  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8034  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8035  ret void8036}8037 8038define void @s_shuffle_v3i16_v3i16__4_4_4() {8039; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_4_4:8040; GFX900:       ; %bb.0:8041; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8042; GFX900-NEXT:    ;;#ASMSTART8043; GFX900-NEXT:    ; def s[4:5]8044; GFX900-NEXT:    ;;#ASMEND8045; GFX900-NEXT:    s_lshr_b32 s9, s4, 168046; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s48047; GFX900-NEXT:    ;;#ASMSTART8048; GFX900-NEXT:    ; use s[8:9]8049; GFX900-NEXT:    ;;#ASMEND8050; GFX900-NEXT:    s_setpc_b64 s[30:31]8051;8052; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_4_4:8053; GFX90A:       ; %bb.0:8054; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8055; GFX90A-NEXT:    ;;#ASMSTART8056; GFX90A-NEXT:    ; def s[4:5]8057; GFX90A-NEXT:    ;;#ASMEND8058; GFX90A-NEXT:    s_lshr_b32 s9, s4, 168059; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s48060; GFX90A-NEXT:    ;;#ASMSTART8061; GFX90A-NEXT:    ; use s[8:9]8062; GFX90A-NEXT:    ;;#ASMEND8063; GFX90A-NEXT:    s_setpc_b64 s[30:31]8064;8065; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_4_4:8066; GFX942:       ; %bb.0:8067; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8068; GFX942-NEXT:    ;;#ASMSTART8069; GFX942-NEXT:    ; def s[0:1]8070; GFX942-NEXT:    ;;#ASMEND8071; GFX942-NEXT:    s_lshr_b32 s9, s0, 168072; GFX942-NEXT:    s_pack_hh_b32_b16 s8, s0, s08073; GFX942-NEXT:    ;;#ASMSTART8074; GFX942-NEXT:    ; use s[8:9]8075; GFX942-NEXT:    ;;#ASMEND8076; GFX942-NEXT:    s_setpc_b64 s[30:31]8077  %vec0 = call <4 x i16> asm "; def $0", "=s"()8078  %vec1 = call <4 x i16> asm "; def $0", "=s"()8079  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8080  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8081  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 4, i32 4>8082  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8083  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8084  ret void8085}8086 8087define void @s_shuffle_v3i16_v3i16__5_4_4() {8088; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_4_4:8089; GFX900:       ; %bb.0:8090; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8091; GFX900-NEXT:    ;;#ASMSTART8092; GFX900-NEXT:    ; def s[4:5]8093; GFX900-NEXT:    ;;#ASMEND8094; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s48095; GFX900-NEXT:    s_lshr_b32 s9, s4, 168096; GFX900-NEXT:    ;;#ASMSTART8097; GFX900-NEXT:    ; use s[8:9]8098; GFX900-NEXT:    ;;#ASMEND8099; GFX900-NEXT:    s_setpc_b64 s[30:31]8100;8101; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_4_4:8102; GFX90A:       ; %bb.0:8103; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8104; GFX90A-NEXT:    ;;#ASMSTART8105; GFX90A-NEXT:    ; def s[4:5]8106; GFX90A-NEXT:    ;;#ASMEND8107; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s48108; GFX90A-NEXT:    s_lshr_b32 s9, s4, 168109; GFX90A-NEXT:    ;;#ASMSTART8110; GFX90A-NEXT:    ; use s[8:9]8111; GFX90A-NEXT:    ;;#ASMEND8112; GFX90A-NEXT:    s_setpc_b64 s[30:31]8113;8114; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_4_4:8115; GFX942:       ; %bb.0:8116; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8117; GFX942-NEXT:    ;;#ASMSTART8118; GFX942-NEXT:    ; def s[0:1]8119; GFX942-NEXT:    ;;#ASMEND8120; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s1, s08121; GFX942-NEXT:    s_lshr_b32 s9, s0, 168122; GFX942-NEXT:    ;;#ASMSTART8123; GFX942-NEXT:    ; use s[8:9]8124; GFX942-NEXT:    ;;#ASMEND8125; GFX942-NEXT:    s_setpc_b64 s[30:31]8126  %vec0 = call <4 x i16> asm "; def $0", "=s"()8127  %vec1 = call <4 x i16> asm "; def $0", "=s"()8128  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8129  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8130  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 4>8131  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8132  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8133  ret void8134}8135 8136define void @s_shuffle_v3i16_v3i16__5_u_4() {8137; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_u_4:8138; GFX900:       ; %bb.0:8139; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8140; GFX900-NEXT:    ;;#ASMSTART8141; GFX900-NEXT:    ; def s[4:5]8142; GFX900-NEXT:    ;;#ASMEND8143; GFX900-NEXT:    s_lshr_b32 s9, s4, 168144; GFX900-NEXT:    s_mov_b32 s8, s58145; GFX900-NEXT:    ;;#ASMSTART8146; GFX900-NEXT:    ; use s[8:9]8147; GFX900-NEXT:    ;;#ASMEND8148; GFX900-NEXT:    s_setpc_b64 s[30:31]8149;8150; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_u_4:8151; GFX90A:       ; %bb.0:8152; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8153; GFX90A-NEXT:    ;;#ASMSTART8154; GFX90A-NEXT:    ; def s[4:5]8155; GFX90A-NEXT:    ;;#ASMEND8156; GFX90A-NEXT:    s_lshr_b32 s9, s4, 168157; GFX90A-NEXT:    s_mov_b32 s8, s58158; GFX90A-NEXT:    ;;#ASMSTART8159; GFX90A-NEXT:    ; use s[8:9]8160; GFX90A-NEXT:    ;;#ASMEND8161; GFX90A-NEXT:    s_setpc_b64 s[30:31]8162;8163; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_u_4:8164; GFX942:       ; %bb.0:8165; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8166; GFX942-NEXT:    ;;#ASMSTART8167; GFX942-NEXT:    ; def s[0:1]8168; GFX942-NEXT:    ;;#ASMEND8169; GFX942-NEXT:    s_lshr_b32 s9, s0, 168170; GFX942-NEXT:    s_mov_b32 s8, s18171; GFX942-NEXT:    ;;#ASMSTART8172; GFX942-NEXT:    ; use s[8:9]8173; GFX942-NEXT:    ;;#ASMEND8174; GFX942-NEXT:    s_setpc_b64 s[30:31]8175  %vec0 = call <4 x i16> asm "; def $0", "=s"()8176  %vec1 = call <4 x i16> asm "; def $0", "=s"()8177  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8178  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8179  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 4>8180  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8181  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8182  ret void8183}8184 8185define void @s_shuffle_v3i16_v3i16__5_0_4() {8186; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_4:8187; GFX900:       ; %bb.0:8188; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8189; GFX900-NEXT:    ;;#ASMSTART8190; GFX900-NEXT:    ; def s[4:5]8191; GFX900-NEXT:    ;;#ASMEND8192; GFX900-NEXT:    ;;#ASMSTART8193; GFX900-NEXT:    ; def s[6:7]8194; GFX900-NEXT:    ;;#ASMEND8195; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s48196; GFX900-NEXT:    s_lshr_b32 s9, s6, 168197; GFX900-NEXT:    ;;#ASMSTART8198; GFX900-NEXT:    ; use s[8:9]8199; GFX900-NEXT:    ;;#ASMEND8200; GFX900-NEXT:    s_setpc_b64 s[30:31]8201;8202; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_4:8203; GFX90A:       ; %bb.0:8204; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8205; GFX90A-NEXT:    ;;#ASMSTART8206; GFX90A-NEXT:    ; def s[4:5]8207; GFX90A-NEXT:    ;;#ASMEND8208; GFX90A-NEXT:    ;;#ASMSTART8209; GFX90A-NEXT:    ; def s[6:7]8210; GFX90A-NEXT:    ;;#ASMEND8211; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s48212; GFX90A-NEXT:    s_lshr_b32 s9, s6, 168213; GFX90A-NEXT:    ;;#ASMSTART8214; GFX90A-NEXT:    ; use s[8:9]8215; GFX90A-NEXT:    ;;#ASMEND8216; GFX90A-NEXT:    s_setpc_b64 s[30:31]8217;8218; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_4:8219; GFX942:       ; %bb.0:8220; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8221; GFX942-NEXT:    ;;#ASMSTART8222; GFX942-NEXT:    ; def s[0:1]8223; GFX942-NEXT:    ;;#ASMEND8224; GFX942-NEXT:    ;;#ASMSTART8225; GFX942-NEXT:    ; def s[2:3]8226; GFX942-NEXT:    ;;#ASMEND8227; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s08228; GFX942-NEXT:    s_lshr_b32 s9, s2, 168229; GFX942-NEXT:    ;;#ASMSTART8230; GFX942-NEXT:    ; use s[8:9]8231; GFX942-NEXT:    ;;#ASMEND8232; GFX942-NEXT:    s_setpc_b64 s[30:31]8233  %vec0 = call <4 x i16> asm "; def $0", "=s"()8234  %vec1 = call <4 x i16> asm "; def $0", "=s"()8235  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8236  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8237  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 4>8238  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8239  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8240  ret void8241}8242 8243define void @s_shuffle_v3i16_v3i16__5_1_4() {8244; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_4:8245; GFX900:       ; %bb.0:8246; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8247; GFX900-NEXT:    ;;#ASMSTART8248; GFX900-NEXT:    ; def s[4:5]8249; GFX900-NEXT:    ;;#ASMEND8250; GFX900-NEXT:    ;;#ASMSTART8251; GFX900-NEXT:    ; def s[6:7]8252; GFX900-NEXT:    ;;#ASMEND8253; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s48254; GFX900-NEXT:    s_lshr_b32 s9, s6, 168255; GFX900-NEXT:    ;;#ASMSTART8256; GFX900-NEXT:    ; use s[8:9]8257; GFX900-NEXT:    ;;#ASMEND8258; GFX900-NEXT:    s_setpc_b64 s[30:31]8259;8260; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_4:8261; GFX90A:       ; %bb.0:8262; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8263; GFX90A-NEXT:    ;;#ASMSTART8264; GFX90A-NEXT:    ; def s[4:5]8265; GFX90A-NEXT:    ;;#ASMEND8266; GFX90A-NEXT:    ;;#ASMSTART8267; GFX90A-NEXT:    ; def s[6:7]8268; GFX90A-NEXT:    ;;#ASMEND8269; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s48270; GFX90A-NEXT:    s_lshr_b32 s9, s6, 168271; GFX90A-NEXT:    ;;#ASMSTART8272; GFX90A-NEXT:    ; use s[8:9]8273; GFX90A-NEXT:    ;;#ASMEND8274; GFX90A-NEXT:    s_setpc_b64 s[30:31]8275;8276; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_4:8277; GFX942:       ; %bb.0:8278; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8279; GFX942-NEXT:    ;;#ASMSTART8280; GFX942-NEXT:    ; def s[0:1]8281; GFX942-NEXT:    ;;#ASMEND8282; GFX942-NEXT:    ;;#ASMSTART8283; GFX942-NEXT:    ; def s[2:3]8284; GFX942-NEXT:    ;;#ASMEND8285; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s3, s08286; GFX942-NEXT:    s_lshr_b32 s9, s2, 168287; GFX942-NEXT:    ;;#ASMSTART8288; GFX942-NEXT:    ; use s[8:9]8289; GFX942-NEXT:    ;;#ASMEND8290; GFX942-NEXT:    s_setpc_b64 s[30:31]8291  %vec0 = call <4 x i16> asm "; def $0", "=s"()8292  %vec1 = call <4 x i16> asm "; def $0", "=s"()8293  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8294  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8295  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 4>8296  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8297  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8298  ret void8299}8300 8301define void @s_shuffle_v3i16_v3i16__5_2_4() {8302; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_4:8303; GFX900:       ; %bb.0:8304; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8305; GFX900-NEXT:    ;;#ASMSTART8306; GFX900-NEXT:    ; def s[4:5]8307; GFX900-NEXT:    ;;#ASMEND8308; GFX900-NEXT:    ;;#ASMSTART8309; GFX900-NEXT:    ; def s[6:7]8310; GFX900-NEXT:    ;;#ASMEND8311; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s58312; GFX900-NEXT:    s_lshr_b32 s9, s6, 168313; GFX900-NEXT:    ;;#ASMSTART8314; GFX900-NEXT:    ; use s[8:9]8315; GFX900-NEXT:    ;;#ASMEND8316; GFX900-NEXT:    s_setpc_b64 s[30:31]8317;8318; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_4:8319; GFX90A:       ; %bb.0:8320; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8321; GFX90A-NEXT:    ;;#ASMSTART8322; GFX90A-NEXT:    ; def s[4:5]8323; GFX90A-NEXT:    ;;#ASMEND8324; GFX90A-NEXT:    ;;#ASMSTART8325; GFX90A-NEXT:    ; def s[6:7]8326; GFX90A-NEXT:    ;;#ASMEND8327; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s58328; GFX90A-NEXT:    s_lshr_b32 s9, s6, 168329; GFX90A-NEXT:    ;;#ASMSTART8330; GFX90A-NEXT:    ; use s[8:9]8331; GFX90A-NEXT:    ;;#ASMEND8332; GFX90A-NEXT:    s_setpc_b64 s[30:31]8333;8334; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_4:8335; GFX942:       ; %bb.0:8336; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8337; GFX942-NEXT:    ;;#ASMSTART8338; GFX942-NEXT:    ; def s[0:1]8339; GFX942-NEXT:    ;;#ASMEND8340; GFX942-NEXT:    ;;#ASMSTART8341; GFX942-NEXT:    ; def s[2:3]8342; GFX942-NEXT:    ;;#ASMEND8343; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s18344; GFX942-NEXT:    s_lshr_b32 s9, s2, 168345; GFX942-NEXT:    ;;#ASMSTART8346; GFX942-NEXT:    ; use s[8:9]8347; GFX942-NEXT:    ;;#ASMEND8348; GFX942-NEXT:    s_setpc_b64 s[30:31]8349  %vec0 = call <4 x i16> asm "; def $0", "=s"()8350  %vec1 = call <4 x i16> asm "; def $0", "=s"()8351  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8352  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8353  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 4>8354  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8355  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8356  ret void8357}8358 8359define void @s_shuffle_v3i16_v3i16__5_3_4() {8360; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_3_4:8361; GFX900:       ; %bb.0:8362; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8363; GFX900-NEXT:    ;;#ASMSTART8364; GFX900-NEXT:    ; def s[4:5]8365; GFX900-NEXT:    ;;#ASMEND8366; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s48367; GFX900-NEXT:    s_lshr_b32 s9, s4, 168368; GFX900-NEXT:    ;;#ASMSTART8369; GFX900-NEXT:    ; use s[8:9]8370; GFX900-NEXT:    ;;#ASMEND8371; GFX900-NEXT:    s_setpc_b64 s[30:31]8372;8373; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_3_4:8374; GFX90A:       ; %bb.0:8375; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8376; GFX90A-NEXT:    ;;#ASMSTART8377; GFX90A-NEXT:    ; def s[4:5]8378; GFX90A-NEXT:    ;;#ASMEND8379; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s48380; GFX90A-NEXT:    s_lshr_b32 s9, s4, 168381; GFX90A-NEXT:    ;;#ASMSTART8382; GFX90A-NEXT:    ; use s[8:9]8383; GFX90A-NEXT:    ;;#ASMEND8384; GFX90A-NEXT:    s_setpc_b64 s[30:31]8385;8386; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_3_4:8387; GFX942:       ; %bb.0:8388; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8389; GFX942-NEXT:    ;;#ASMSTART8390; GFX942-NEXT:    ; def s[0:1]8391; GFX942-NEXT:    ;;#ASMEND8392; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s08393; GFX942-NEXT:    s_lshr_b32 s9, s0, 168394; GFX942-NEXT:    ;;#ASMSTART8395; GFX942-NEXT:    ; use s[8:9]8396; GFX942-NEXT:    ;;#ASMEND8397; GFX942-NEXT:    s_setpc_b64 s[30:31]8398  %vec0 = call <4 x i16> asm "; def $0", "=s"()8399  %vec1 = call <4 x i16> asm "; def $0", "=s"()8400  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8401  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8402  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 4>8403  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8404  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8405  ret void8406}8407 8408define void @s_shuffle_v3i16_v3i16__u_5_5() {8409; GFX9-LABEL: s_shuffle_v3i16_v3i16__u_5_5:8410; GFX9:       ; %bb.0:8411; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8412; GFX9-NEXT:    ;;#ASMSTART8413; GFX9-NEXT:    ; def s[8:9]8414; GFX9-NEXT:    ;;#ASMEND8415; GFX9-NEXT:    s_lshl_b32 s8, s9, 168416; GFX9-NEXT:    ;;#ASMSTART8417; GFX9-NEXT:    ; use s[8:9]8418; GFX9-NEXT:    ;;#ASMEND8419; GFX9-NEXT:    s_setpc_b64 s[30:31]8420  %vec0 = call <4 x i16> asm "; def $0", "=s"()8421  %vec1 = call <4 x i16> asm "; def $0", "=s"()8422  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8423  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8424  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 poison, i32 5, i32 5>8425  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8426  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8427  ret void8428}8429 8430define void @s_shuffle_v3i16_v3i16__0_5_5() {8431; GFX900-LABEL: s_shuffle_v3i16_v3i16__0_5_5:8432; GFX900:       ; %bb.0:8433; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8434; GFX900-NEXT:    ;;#ASMSTART8435; GFX900-NEXT:    ; def s[8:9]8436; GFX900-NEXT:    ;;#ASMEND8437; GFX900-NEXT:    ;;#ASMSTART8438; GFX900-NEXT:    ; def s[4:5]8439; GFX900-NEXT:    ;;#ASMEND8440; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s98441; GFX900-NEXT:    ;;#ASMSTART8442; GFX900-NEXT:    ; use s[8:9]8443; GFX900-NEXT:    ;;#ASMEND8444; GFX900-NEXT:    s_setpc_b64 s[30:31]8445;8446; GFX90A-LABEL: s_shuffle_v3i16_v3i16__0_5_5:8447; GFX90A:       ; %bb.0:8448; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8449; GFX90A-NEXT:    ;;#ASMSTART8450; GFX90A-NEXT:    ; def s[8:9]8451; GFX90A-NEXT:    ;;#ASMEND8452; GFX90A-NEXT:    ;;#ASMSTART8453; GFX90A-NEXT:    ; def s[4:5]8454; GFX90A-NEXT:    ;;#ASMEND8455; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s98456; GFX90A-NEXT:    ;;#ASMSTART8457; GFX90A-NEXT:    ; use s[8:9]8458; GFX90A-NEXT:    ;;#ASMEND8459; GFX90A-NEXT:    s_setpc_b64 s[30:31]8460;8461; GFX942-LABEL: s_shuffle_v3i16_v3i16__0_5_5:8462; GFX942:       ; %bb.0:8463; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8464; GFX942-NEXT:    ;;#ASMSTART8465; GFX942-NEXT:    ; def s[8:9]8466; GFX942-NEXT:    ;;#ASMEND8467; GFX942-NEXT:    ;;#ASMSTART8468; GFX942-NEXT:    ; def s[0:1]8469; GFX942-NEXT:    ;;#ASMEND8470; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s98471; GFX942-NEXT:    ;;#ASMSTART8472; GFX942-NEXT:    ; use s[8:9]8473; GFX942-NEXT:    ;;#ASMEND8474; GFX942-NEXT:    s_setpc_b64 s[30:31]8475  %vec0 = call <4 x i16> asm "; def $0", "=s"()8476  %vec1 = call <4 x i16> asm "; def $0", "=s"()8477  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8478  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8479  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 0, i32 5, i32 5>8480  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8481  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8482  ret void8483}8484 8485define void @s_shuffle_v3i16_v3i16__1_5_5() {8486; GFX900-LABEL: s_shuffle_v3i16_v3i16__1_5_5:8487; GFX900:       ; %bb.0:8488; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8489; GFX900-NEXT:    ;;#ASMSTART8490; GFX900-NEXT:    ; def s[4:5]8491; GFX900-NEXT:    ;;#ASMEND8492; GFX900-NEXT:    ;;#ASMSTART8493; GFX900-NEXT:    ; def s[8:9]8494; GFX900-NEXT:    ;;#ASMEND8495; GFX900-NEXT:    s_lshr_b32 s4, s4, 168496; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s98497; GFX900-NEXT:    ;;#ASMSTART8498; GFX900-NEXT:    ; use s[8:9]8499; GFX900-NEXT:    ;;#ASMEND8500; GFX900-NEXT:    s_setpc_b64 s[30:31]8501;8502; GFX90A-LABEL: s_shuffle_v3i16_v3i16__1_5_5:8503; GFX90A:       ; %bb.0:8504; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8505; GFX90A-NEXT:    ;;#ASMSTART8506; GFX90A-NEXT:    ; def s[4:5]8507; GFX90A-NEXT:    ;;#ASMEND8508; GFX90A-NEXT:    ;;#ASMSTART8509; GFX90A-NEXT:    ; def s[8:9]8510; GFX90A-NEXT:    ;;#ASMEND8511; GFX90A-NEXT:    s_lshr_b32 s4, s4, 168512; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s98513; GFX90A-NEXT:    ;;#ASMSTART8514; GFX90A-NEXT:    ; use s[8:9]8515; GFX90A-NEXT:    ;;#ASMEND8516; GFX90A-NEXT:    s_setpc_b64 s[30:31]8517;8518; GFX942-LABEL: s_shuffle_v3i16_v3i16__1_5_5:8519; GFX942:       ; %bb.0:8520; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8521; GFX942-NEXT:    ;;#ASMSTART8522; GFX942-NEXT:    ; def s[0:1]8523; GFX942-NEXT:    ;;#ASMEND8524; GFX942-NEXT:    ;;#ASMSTART8525; GFX942-NEXT:    ; def s[8:9]8526; GFX942-NEXT:    ;;#ASMEND8527; GFX942-NEXT:    s_lshr_b32 s0, s0, 168528; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s98529; GFX942-NEXT:    ;;#ASMSTART8530; GFX942-NEXT:    ; use s[8:9]8531; GFX942-NEXT:    ;;#ASMEND8532; GFX942-NEXT:    s_setpc_b64 s[30:31]8533  %vec0 = call <4 x i16> asm "; def $0", "=s"()8534  %vec1 = call <4 x i16> asm "; def $0", "=s"()8535  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8536  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8537  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 1, i32 5, i32 5>8538  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8539  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8540  ret void8541}8542 8543define void @s_shuffle_v3i16_v3i16__2_5_5() {8544; GFX900-LABEL: s_shuffle_v3i16_v3i16__2_5_5:8545; GFX900:       ; %bb.0:8546; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8547; GFX900-NEXT:    ;;#ASMSTART8548; GFX900-NEXT:    ; def s[8:9]8549; GFX900-NEXT:    ;;#ASMEND8550; GFX900-NEXT:    ;;#ASMSTART8551; GFX900-NEXT:    ; def s[4:5]8552; GFX900-NEXT:    ;;#ASMEND8553; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s98554; GFX900-NEXT:    ;;#ASMSTART8555; GFX900-NEXT:    ; use s[8:9]8556; GFX900-NEXT:    ;;#ASMEND8557; GFX900-NEXT:    s_setpc_b64 s[30:31]8558;8559; GFX90A-LABEL: s_shuffle_v3i16_v3i16__2_5_5:8560; GFX90A:       ; %bb.0:8561; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8562; GFX90A-NEXT:    ;;#ASMSTART8563; GFX90A-NEXT:    ; def s[8:9]8564; GFX90A-NEXT:    ;;#ASMEND8565; GFX90A-NEXT:    ;;#ASMSTART8566; GFX90A-NEXT:    ; def s[4:5]8567; GFX90A-NEXT:    ;;#ASMEND8568; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s98569; GFX90A-NEXT:    ;;#ASMSTART8570; GFX90A-NEXT:    ; use s[8:9]8571; GFX90A-NEXT:    ;;#ASMEND8572; GFX90A-NEXT:    s_setpc_b64 s[30:31]8573;8574; GFX942-LABEL: s_shuffle_v3i16_v3i16__2_5_5:8575; GFX942:       ; %bb.0:8576; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8577; GFX942-NEXT:    ;;#ASMSTART8578; GFX942-NEXT:    ; def s[8:9]8579; GFX942-NEXT:    ;;#ASMEND8580; GFX942-NEXT:    ;;#ASMSTART8581; GFX942-NEXT:    ; def s[0:1]8582; GFX942-NEXT:    ;;#ASMEND8583; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s98584; GFX942-NEXT:    ;;#ASMSTART8585; GFX942-NEXT:    ; use s[8:9]8586; GFX942-NEXT:    ;;#ASMEND8587; GFX942-NEXT:    s_setpc_b64 s[30:31]8588  %vec0 = call <4 x i16> asm "; def $0", "=s"()8589  %vec1 = call <4 x i16> asm "; def $0", "=s"()8590  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8591  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8592  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 2, i32 5, i32 5>8593  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8594  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8595  ret void8596}8597 8598define void @s_shuffle_v3i16_v3i16__3_5_5() {8599; GFX9-LABEL: s_shuffle_v3i16_v3i16__3_5_5:8600; GFX9:       ; %bb.0:8601; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8602; GFX9-NEXT:    ;;#ASMSTART8603; GFX9-NEXT:    ; def s[8:9]8604; GFX9-NEXT:    ;;#ASMEND8605; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s8, s98606; GFX9-NEXT:    ;;#ASMSTART8607; GFX9-NEXT:    ; use s[8:9]8608; GFX9-NEXT:    ;;#ASMEND8609; GFX9-NEXT:    s_setpc_b64 s[30:31]8610  %vec0 = call <4 x i16> asm "; def $0", "=s"()8611  %vec1 = call <4 x i16> asm "; def $0", "=s"()8612  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8613  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8614  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 3, i32 5, i32 5>8615  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8616  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8617  ret void8618}8619 8620define void @s_shuffle_v3i16_v3i16__4_5_5() {8621; GFX900-LABEL: s_shuffle_v3i16_v3i16__4_5_5:8622; GFX900:       ; %bb.0:8623; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8624; GFX900-NEXT:    ;;#ASMSTART8625; GFX900-NEXT:    ; def s[8:9]8626; GFX900-NEXT:    ;;#ASMEND8627; GFX900-NEXT:    s_lshr_b32 s4, s8, 168628; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s98629; GFX900-NEXT:    ;;#ASMSTART8630; GFX900-NEXT:    ; use s[8:9]8631; GFX900-NEXT:    ;;#ASMEND8632; GFX900-NEXT:    s_setpc_b64 s[30:31]8633;8634; GFX90A-LABEL: s_shuffle_v3i16_v3i16__4_5_5:8635; GFX90A:       ; %bb.0:8636; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8637; GFX90A-NEXT:    ;;#ASMSTART8638; GFX90A-NEXT:    ; def s[8:9]8639; GFX90A-NEXT:    ;;#ASMEND8640; GFX90A-NEXT:    s_lshr_b32 s4, s8, 168641; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s98642; GFX90A-NEXT:    ;;#ASMSTART8643; GFX90A-NEXT:    ; use s[8:9]8644; GFX90A-NEXT:    ;;#ASMEND8645; GFX90A-NEXT:    s_setpc_b64 s[30:31]8646;8647; GFX942-LABEL: s_shuffle_v3i16_v3i16__4_5_5:8648; GFX942:       ; %bb.0:8649; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8650; GFX942-NEXT:    ;;#ASMSTART8651; GFX942-NEXT:    ; def s[8:9]8652; GFX942-NEXT:    ;;#ASMEND8653; GFX942-NEXT:    s_lshr_b32 s0, s8, 168654; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s98655; GFX942-NEXT:    ;;#ASMSTART8656; GFX942-NEXT:    ; use s[8:9]8657; GFX942-NEXT:    ;;#ASMEND8658; GFX942-NEXT:    s_setpc_b64 s[30:31]8659  %vec0 = call <4 x i16> asm "; def $0", "=s"()8660  %vec1 = call <4 x i16> asm "; def $0", "=s"()8661  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8662  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8663  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 4, i32 5, i32 5>8664  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8665  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8666  ret void8667}8668 8669define void @s_shuffle_v3i16_v3i16__5_u_5() {8670; GFX9-LABEL: s_shuffle_v3i16_v3i16__5_u_5:8671; GFX9:       ; %bb.0:8672; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8673; GFX9-NEXT:    ;;#ASMSTART8674; GFX9-NEXT:    ; def s[8:9]8675; GFX9-NEXT:    ;;#ASMEND8676; GFX9-NEXT:    s_mov_b32 s8, s98677; GFX9-NEXT:    ;;#ASMSTART8678; GFX9-NEXT:    ; use s[8:9]8679; GFX9-NEXT:    ;;#ASMEND8680; GFX9-NEXT:    s_setpc_b64 s[30:31]8681  %vec0 = call <4 x i16> asm "; def $0", "=s"()8682  %vec1 = call <4 x i16> asm "; def $0", "=s"()8683  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8684  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8685  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 poison, i32 5>8686  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8687  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8688  ret void8689}8690 8691define void @s_shuffle_v3i16_v3i16__5_0_5() {8692; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_0_5:8693; GFX900:       ; %bb.0:8694; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8695; GFX900-NEXT:    ;;#ASMSTART8696; GFX900-NEXT:    ; def s[8:9]8697; GFX900-NEXT:    ;;#ASMEND8698; GFX900-NEXT:    ;;#ASMSTART8699; GFX900-NEXT:    ; def s[4:5]8700; GFX900-NEXT:    ;;#ASMEND8701; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s9, s48702; GFX900-NEXT:    ;;#ASMSTART8703; GFX900-NEXT:    ; use s[8:9]8704; GFX900-NEXT:    ;;#ASMEND8705; GFX900-NEXT:    s_setpc_b64 s[30:31]8706;8707; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_0_5:8708; GFX90A:       ; %bb.0:8709; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8710; GFX90A-NEXT:    ;;#ASMSTART8711; GFX90A-NEXT:    ; def s[8:9]8712; GFX90A-NEXT:    ;;#ASMEND8713; GFX90A-NEXT:    ;;#ASMSTART8714; GFX90A-NEXT:    ; def s[4:5]8715; GFX90A-NEXT:    ;;#ASMEND8716; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s9, s48717; GFX90A-NEXT:    ;;#ASMSTART8718; GFX90A-NEXT:    ; use s[8:9]8719; GFX90A-NEXT:    ;;#ASMEND8720; GFX90A-NEXT:    s_setpc_b64 s[30:31]8721;8722; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_0_5:8723; GFX942:       ; %bb.0:8724; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8725; GFX942-NEXT:    ;;#ASMSTART8726; GFX942-NEXT:    ; def s[8:9]8727; GFX942-NEXT:    ;;#ASMEND8728; GFX942-NEXT:    ;;#ASMSTART8729; GFX942-NEXT:    ; def s[0:1]8730; GFX942-NEXT:    ;;#ASMEND8731; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s9, s08732; GFX942-NEXT:    ;;#ASMSTART8733; GFX942-NEXT:    ; use s[8:9]8734; GFX942-NEXT:    ;;#ASMEND8735; GFX942-NEXT:    s_setpc_b64 s[30:31]8736  %vec0 = call <4 x i16> asm "; def $0", "=s"()8737  %vec1 = call <4 x i16> asm "; def $0", "=s"()8738  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8739  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8740  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 0, i32 5>8741  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8742  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8743  ret void8744}8745 8746define void @s_shuffle_v3i16_v3i16__5_1_5() {8747; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_1_5:8748; GFX900:       ; %bb.0:8749; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8750; GFX900-NEXT:    ;;#ASMSTART8751; GFX900-NEXT:    ; def s[8:9]8752; GFX900-NEXT:    ;;#ASMEND8753; GFX900-NEXT:    ;;#ASMSTART8754; GFX900-NEXT:    ; def s[4:5]8755; GFX900-NEXT:    ;;#ASMEND8756; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s9, s48757; GFX900-NEXT:    ;;#ASMSTART8758; GFX900-NEXT:    ; use s[8:9]8759; GFX900-NEXT:    ;;#ASMEND8760; GFX900-NEXT:    s_setpc_b64 s[30:31]8761;8762; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_1_5:8763; GFX90A:       ; %bb.0:8764; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8765; GFX90A-NEXT:    ;;#ASMSTART8766; GFX90A-NEXT:    ; def s[8:9]8767; GFX90A-NEXT:    ;;#ASMEND8768; GFX90A-NEXT:    ;;#ASMSTART8769; GFX90A-NEXT:    ; def s[4:5]8770; GFX90A-NEXT:    ;;#ASMEND8771; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s9, s48772; GFX90A-NEXT:    ;;#ASMSTART8773; GFX90A-NEXT:    ; use s[8:9]8774; GFX90A-NEXT:    ;;#ASMEND8775; GFX90A-NEXT:    s_setpc_b64 s[30:31]8776;8777; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_1_5:8778; GFX942:       ; %bb.0:8779; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8780; GFX942-NEXT:    ;;#ASMSTART8781; GFX942-NEXT:    ; def s[8:9]8782; GFX942-NEXT:    ;;#ASMEND8783; GFX942-NEXT:    ;;#ASMSTART8784; GFX942-NEXT:    ; def s[0:1]8785; GFX942-NEXT:    ;;#ASMEND8786; GFX942-NEXT:    s_pack_lh_b32_b16 s8, s9, s08787; GFX942-NEXT:    ;;#ASMSTART8788; GFX942-NEXT:    ; use s[8:9]8789; GFX942-NEXT:    ;;#ASMEND8790; GFX942-NEXT:    s_setpc_b64 s[30:31]8791  %vec0 = call <4 x i16> asm "; def $0", "=s"()8792  %vec1 = call <4 x i16> asm "; def $0", "=s"()8793  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8794  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8795  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 1, i32 5>8796  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8797  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8798  ret void8799}8800 8801define void @s_shuffle_v3i16_v3i16__5_2_5() {8802; GFX900-LABEL: s_shuffle_v3i16_v3i16__5_2_5:8803; GFX900:       ; %bb.0:8804; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8805; GFX900-NEXT:    ;;#ASMSTART8806; GFX900-NEXT:    ; def s[8:9]8807; GFX900-NEXT:    ;;#ASMEND8808; GFX900-NEXT:    ;;#ASMSTART8809; GFX900-NEXT:    ; def s[4:5]8810; GFX900-NEXT:    ;;#ASMEND8811; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s9, s58812; GFX900-NEXT:    ;;#ASMSTART8813; GFX900-NEXT:    ; use s[8:9]8814; GFX900-NEXT:    ;;#ASMEND8815; GFX900-NEXT:    s_setpc_b64 s[30:31]8816;8817; GFX90A-LABEL: s_shuffle_v3i16_v3i16__5_2_5:8818; GFX90A:       ; %bb.0:8819; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8820; GFX90A-NEXT:    ;;#ASMSTART8821; GFX90A-NEXT:    ; def s[8:9]8822; GFX90A-NEXT:    ;;#ASMEND8823; GFX90A-NEXT:    ;;#ASMSTART8824; GFX90A-NEXT:    ; def s[4:5]8825; GFX90A-NEXT:    ;;#ASMEND8826; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s9, s58827; GFX90A-NEXT:    ;;#ASMSTART8828; GFX90A-NEXT:    ; use s[8:9]8829; GFX90A-NEXT:    ;;#ASMEND8830; GFX90A-NEXT:    s_setpc_b64 s[30:31]8831;8832; GFX942-LABEL: s_shuffle_v3i16_v3i16__5_2_5:8833; GFX942:       ; %bb.0:8834; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8835; GFX942-NEXT:    ;;#ASMSTART8836; GFX942-NEXT:    ; def s[8:9]8837; GFX942-NEXT:    ;;#ASMEND8838; GFX942-NEXT:    ;;#ASMSTART8839; GFX942-NEXT:    ; def s[0:1]8840; GFX942-NEXT:    ;;#ASMEND8841; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s9, s18842; GFX942-NEXT:    ;;#ASMSTART8843; GFX942-NEXT:    ; use s[8:9]8844; GFX942-NEXT:    ;;#ASMEND8845; GFX942-NEXT:    s_setpc_b64 s[30:31]8846  %vec0 = call <4 x i16> asm "; def $0", "=s"()8847  %vec1 = call <4 x i16> asm "; def $0", "=s"()8848  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8849  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8850  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 2, i32 5>8851  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8852  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8853  ret void8854}8855 8856define void @s_shuffle_v3i16_v3i16__5_3_5() {8857; GFX9-LABEL: s_shuffle_v3i16_v3i16__5_3_5:8858; GFX9:       ; %bb.0:8859; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8860; GFX9-NEXT:    ;;#ASMSTART8861; GFX9-NEXT:    ; def s[8:9]8862; GFX9-NEXT:    ;;#ASMEND8863; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s88864; GFX9-NEXT:    ;;#ASMSTART8865; GFX9-NEXT:    ; use s[8:9]8866; GFX9-NEXT:    ;;#ASMEND8867; GFX9-NEXT:    s_setpc_b64 s[30:31]8868  %vec0 = call <4 x i16> asm "; def $0", "=s"()8869  %vec1 = call <4 x i16> asm "; def $0", "=s"()8870  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8871  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8872  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 3, i32 5>8873  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8874  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8875  ret void8876}8877 8878define void @s_shuffle_v3i16_v3i16__5_4_5() {8879; GFX9-LABEL: s_shuffle_v3i16_v3i16__5_4_5:8880; GFX9:       ; %bb.0:8881; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8882; GFX9-NEXT:    ;;#ASMSTART8883; GFX9-NEXT:    ; def s[8:9]8884; GFX9-NEXT:    ;;#ASMEND8885; GFX9-NEXT:    s_pack_lh_b32_b16 s8, s9, s88886; GFX9-NEXT:    ;;#ASMSTART8887; GFX9-NEXT:    ; use s[8:9]8888; GFX9-NEXT:    ;;#ASMEND8889; GFX9-NEXT:    s_setpc_b64 s[30:31]8890  %vec0 = call <4 x i16> asm "; def $0", "=s"()8891  %vec1 = call <4 x i16> asm "; def $0", "=s"()8892  %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8893  %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8894  %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <3 x i32> <i32 5, i32 4, i32 5>8895  %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8896  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)8897  ret void8898}8899;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:8900; GFX90APLUS: {{.*}}8901