brintos

brintos / llvm-project-archived public Read only

0
0
Text · 253.7 KiB · 21c1e19 Raw
7330 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v2f16_v4f16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2f16_v4f16__u_u:9; GFX9:       ; %bb.0:10; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT:    s_setpc_b64 s[30:31]12  %vec0 = call <4 x half> asm "; def $0", "=v"()13  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> poison14  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 415  ret void16}17 18define void @v_shuffle_v2f16_v4f16__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_u:20; GFX900:       ; %bb.0:21; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT:    v_mov_b32_e32 v2, 023; GFX900-NEXT:    ;;#ASMSTART24; GFX900-NEXT:    ; def v[0:1]25; GFX900-NEXT:    ;;#ASMEND26; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]27; GFX900-NEXT:    s_waitcnt vmcnt(0)28; GFX900-NEXT:    s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_u:31; GFX90A:       ; %bb.0:32; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT:    v_mov_b32_e32 v2, 034; GFX90A-NEXT:    ;;#ASMSTART35; GFX90A-NEXT:    ; def v[0:1]36; GFX90A-NEXT:    ;;#ASMEND37; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]38; GFX90A-NEXT:    s_waitcnt vmcnt(0)39; GFX90A-NEXT:    s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_u:42; GFX942:       ; %bb.0:43; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT:    v_mov_b32_e32 v2, 045; GFX942-NEXT:    ;;#ASMSTART46; GFX942-NEXT:    ; def v[0:1]47; GFX942-NEXT:    ;;#ASMEND48; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]49; GFX942-NEXT:    s_waitcnt vmcnt(0)50; GFX942-NEXT:    s_setpc_b64 s[30:31]51  %vec0 = call <4 x half> asm "; def $0", "=v"()52  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 poison>53  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 454  ret void55}56 57define void @v_shuffle_v2f16_v4f16__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_u:59; GFX900:       ; %bb.0:60; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT:    ;;#ASMSTART62; GFX900-NEXT:    ; def v[0:1]63; GFX900-NEXT:    ;;#ASMEND64; GFX900-NEXT:    v_mov_b32_e32 v2, 065; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 1666; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]67; GFX900-NEXT:    s_waitcnt vmcnt(0)68; GFX900-NEXT:    s_setpc_b64 s[30:31]69;70; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_u:71; GFX90A:       ; %bb.0:72; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT:    ;;#ASMSTART74; GFX90A-NEXT:    ; def v[0:1]75; GFX90A-NEXT:    ;;#ASMEND76; GFX90A-NEXT:    v_mov_b32_e32 v2, 077; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 1678; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]79; GFX90A-NEXT:    s_waitcnt vmcnt(0)80; GFX90A-NEXT:    s_setpc_b64 s[30:31]81;82; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_u:83; GFX942:       ; %bb.0:84; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT:    ;;#ASMSTART86; GFX942-NEXT:    ; def v[0:1]87; GFX942-NEXT:    ;;#ASMEND88; GFX942-NEXT:    v_mov_b32_e32 v2, 089; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 1690; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]91; GFX942-NEXT:    s_waitcnt vmcnt(0)92; GFX942-NEXT:    s_setpc_b64 s[30:31]93  %vec0 = call <4 x half> asm "; def $0", "=v"()94  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 poison>95  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 496  ret void97}98 99define void @v_shuffle_v2f16_v4f16__2_u(ptr addrspace(1) inreg %ptr) {100; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_u:101; GFX900:       ; %bb.0:102; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX900-NEXT:    v_mov_b32_e32 v2, 0104; GFX900-NEXT:    ;;#ASMSTART105; GFX900-NEXT:    ; def v[0:1]106; GFX900-NEXT:    ;;#ASMEND107; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]108; GFX900-NEXT:    s_waitcnt vmcnt(0)109; GFX900-NEXT:    s_setpc_b64 s[30:31]110;111; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_u:112; GFX90A:       ; %bb.0:113; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX90A-NEXT:    v_mov_b32_e32 v2, 0115; GFX90A-NEXT:    ;;#ASMSTART116; GFX90A-NEXT:    ; def v[0:1]117; GFX90A-NEXT:    ;;#ASMEND118; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]119; GFX90A-NEXT:    s_waitcnt vmcnt(0)120; GFX90A-NEXT:    s_setpc_b64 s[30:31]121;122; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_u:123; GFX942:       ; %bb.0:124; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)125; GFX942-NEXT:    v_mov_b32_e32 v2, 0126; GFX942-NEXT:    ;;#ASMSTART127; GFX942-NEXT:    ; def v[0:1]128; GFX942-NEXT:    ;;#ASMEND129; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]130; GFX942-NEXT:    s_waitcnt vmcnt(0)131; GFX942-NEXT:    s_setpc_b64 s[30:31]132  %vec0 = call <4 x half> asm "; def $0", "=v"()133  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 poison>134  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4135  ret void136}137 138define void @v_shuffle_v2f16_v4f16__3_u(ptr addrspace(1) inreg %ptr) {139; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_u:140; GFX900:       ; %bb.0:141; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX900-NEXT:    ;;#ASMSTART143; GFX900-NEXT:    ; def v[0:1]144; GFX900-NEXT:    ;;#ASMEND145; GFX900-NEXT:    v_mov_b32_e32 v2, 0146; GFX900-NEXT:    v_alignbit_b32 v0, s4, v1, 16147; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]148; GFX900-NEXT:    s_waitcnt vmcnt(0)149; GFX900-NEXT:    s_setpc_b64 s[30:31]150;151; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_u:152; GFX90A:       ; %bb.0:153; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX90A-NEXT:    ;;#ASMSTART155; GFX90A-NEXT:    ; def v[0:1]156; GFX90A-NEXT:    ;;#ASMEND157; GFX90A-NEXT:    v_mov_b32_e32 v2, 0158; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v1, 16159; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]160; GFX90A-NEXT:    s_waitcnt vmcnt(0)161; GFX90A-NEXT:    s_setpc_b64 s[30:31]162;163; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_u:164; GFX942:       ; %bb.0:165; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX942-NEXT:    ;;#ASMSTART167; GFX942-NEXT:    ; def v[0:1]168; GFX942-NEXT:    ;;#ASMEND169; GFX942-NEXT:    v_mov_b32_e32 v2, 0170; GFX942-NEXT:    v_alignbit_b32 v0, s0, v1, 16171; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]172; GFX942-NEXT:    s_waitcnt vmcnt(0)173; GFX942-NEXT:    s_setpc_b64 s[30:31]174  %vec0 = call <4 x half> asm "; def $0", "=v"()175  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 poison>176  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4177  ret void178}179 180define void @v_shuffle_v2f16_v4f16__4_u(ptr addrspace(1) inreg %ptr) {181; GFX9-LABEL: v_shuffle_v2f16_v4f16__4_u:182; GFX9:       ; %bb.0:183; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX9-NEXT:    s_setpc_b64 s[30:31]185  %vec0 = call <4 x half> asm "; def $0", "=v"()186  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 poison>187  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4188  ret void189}190 191define void @v_shuffle_v2f16_v4f16__5_u(ptr addrspace(1) inreg %ptr) {192; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_u:193; GFX900:       ; %bb.0:194; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)195; GFX900-NEXT:    ;;#ASMSTART196; GFX900-NEXT:    ; def v[0:1]197; GFX900-NEXT:    ;;#ASMEND198; GFX900-NEXT:    v_mov_b32_e32 v2, 0199; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16200; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]201; GFX900-NEXT:    s_waitcnt vmcnt(0)202; GFX900-NEXT:    s_setpc_b64 s[30:31]203;204; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_u:205; GFX90A:       ; %bb.0:206; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX90A-NEXT:    ;;#ASMSTART208; GFX90A-NEXT:    ; def v[0:1]209; GFX90A-NEXT:    ;;#ASMEND210; GFX90A-NEXT:    v_mov_b32_e32 v2, 0211; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16212; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]213; GFX90A-NEXT:    s_waitcnt vmcnt(0)214; GFX90A-NEXT:    s_setpc_b64 s[30:31]215;216; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_u:217; GFX942:       ; %bb.0:218; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX942-NEXT:    ;;#ASMSTART220; GFX942-NEXT:    ; def v[0:1]221; GFX942-NEXT:    ;;#ASMEND222; GFX942-NEXT:    v_mov_b32_e32 v2, 0223; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 16224; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]225; GFX942-NEXT:    s_waitcnt vmcnt(0)226; GFX942-NEXT:    s_setpc_b64 s[30:31]227  %vec0 = call <4 x half> asm "; def $0", "=v"()228  %vec1 = call <4 x half> asm "; def $0", "=v"()229  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 poison>230  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4231  ret void232}233 234define void @v_shuffle_v2f16_v4f16__6_u(ptr addrspace(1) inreg %ptr) {235; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_u:236; GFX900:       ; %bb.0:237; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX900-NEXT:    v_mov_b32_e32 v2, 0239; GFX900-NEXT:    ;;#ASMSTART240; GFX900-NEXT:    ; def v[0:1]241; GFX900-NEXT:    ;;#ASMEND242; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]243; GFX900-NEXT:    s_waitcnt vmcnt(0)244; GFX900-NEXT:    s_setpc_b64 s[30:31]245;246; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_u:247; GFX90A:       ; %bb.0:248; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX90A-NEXT:    v_mov_b32_e32 v2, 0250; GFX90A-NEXT:    ;;#ASMSTART251; GFX90A-NEXT:    ; def v[0:1]252; GFX90A-NEXT:    ;;#ASMEND253; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]254; GFX90A-NEXT:    s_waitcnt vmcnt(0)255; GFX90A-NEXT:    s_setpc_b64 s[30:31]256;257; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_u:258; GFX942:       ; %bb.0:259; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX942-NEXT:    v_mov_b32_e32 v2, 0261; GFX942-NEXT:    ;;#ASMSTART262; GFX942-NEXT:    ; def v[0:1]263; GFX942-NEXT:    ;;#ASMEND264; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]265; GFX942-NEXT:    s_waitcnt vmcnt(0)266; GFX942-NEXT:    s_setpc_b64 s[30:31]267  %vec0 = call <4 x half> asm "; def $0", "=v"()268  %vec1 = call <4 x half> asm "; def $0", "=v"()269  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 poison>270  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4271  ret void272}273 274define void @v_shuffle_v2f16_v4f16__7_u(ptr addrspace(1) inreg %ptr) {275; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_u:276; GFX900:       ; %bb.0:277; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX900-NEXT:    ;;#ASMSTART279; GFX900-NEXT:    ; def v[0:1]280; GFX900-NEXT:    ;;#ASMEND281; GFX900-NEXT:    v_mov_b32_e32 v2, 0282; GFX900-NEXT:    v_alignbit_b32 v0, s4, v1, 16283; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]284; GFX900-NEXT:    s_waitcnt vmcnt(0)285; GFX900-NEXT:    s_setpc_b64 s[30:31]286;287; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_u:288; GFX90A:       ; %bb.0:289; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX90A-NEXT:    ;;#ASMSTART291; GFX90A-NEXT:    ; def v[0:1]292; GFX90A-NEXT:    ;;#ASMEND293; GFX90A-NEXT:    v_mov_b32_e32 v2, 0294; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v1, 16295; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]296; GFX90A-NEXT:    s_waitcnt vmcnt(0)297; GFX90A-NEXT:    s_setpc_b64 s[30:31]298;299; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_u:300; GFX942:       ; %bb.0:301; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX942-NEXT:    ;;#ASMSTART303; GFX942-NEXT:    ; def v[0:1]304; GFX942-NEXT:    ;;#ASMEND305; GFX942-NEXT:    v_mov_b32_e32 v2, 0306; GFX942-NEXT:    v_alignbit_b32 v0, s0, v1, 16307; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]308; GFX942-NEXT:    s_waitcnt vmcnt(0)309; GFX942-NEXT:    s_setpc_b64 s[30:31]310  %vec0 = call <4 x half> asm "; def $0", "=v"()311  %vec1 = call <4 x half> asm "; def $0", "=v"()312  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 poison>313  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4314  ret void315}316 317define void @v_shuffle_v2f16_v4f16__7_0(ptr addrspace(1) inreg %ptr) {318; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_0:319; GFX900:       ; %bb.0:320; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)321; GFX900-NEXT:    ;;#ASMSTART322; GFX900-NEXT:    ; def v[0:1]323; GFX900-NEXT:    ;;#ASMEND324; GFX900-NEXT:    v_mov_b32_e32 v3, 0325; GFX900-NEXT:    ;;#ASMSTART326; GFX900-NEXT:    ; def v[1:2]327; GFX900-NEXT:    ;;#ASMEND328; GFX900-NEXT:    v_alignbit_b32 v0, v0, v2, 16329; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]330; GFX900-NEXT:    s_waitcnt vmcnt(0)331; GFX900-NEXT:    s_setpc_b64 s[30:31]332;333; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_0:334; GFX90A:       ; %bb.0:335; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX90A-NEXT:    ;;#ASMSTART337; GFX90A-NEXT:    ; def v[0:1]338; GFX90A-NEXT:    ;;#ASMEND339; GFX90A-NEXT:    v_mov_b32_e32 v4, 0340; GFX90A-NEXT:    ;;#ASMSTART341; GFX90A-NEXT:    ; def v[2:3]342; GFX90A-NEXT:    ;;#ASMEND343; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v3, 16344; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]345; GFX90A-NEXT:    s_waitcnt vmcnt(0)346; GFX90A-NEXT:    s_setpc_b64 s[30:31]347;348; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_0:349; GFX942:       ; %bb.0:350; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)351; GFX942-NEXT:    ;;#ASMSTART352; GFX942-NEXT:    ; def v[0:1]353; GFX942-NEXT:    ;;#ASMEND354; GFX942-NEXT:    v_mov_b32_e32 v4, 0355; GFX942-NEXT:    ;;#ASMSTART356; GFX942-NEXT:    ; def v[2:3]357; GFX942-NEXT:    ;;#ASMEND358; GFX942-NEXT:    s_nop 0359; GFX942-NEXT:    v_alignbit_b32 v0, v0, v3, 16360; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]361; GFX942-NEXT:    s_waitcnt vmcnt(0)362; GFX942-NEXT:    s_setpc_b64 s[30:31]363  %vec0 = call <4 x half> asm "; def $0", "=v"()364  %vec1 = call <4 x half> asm "; def $0", "=v"()365  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 0>366  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4367  ret void368}369 370define void @v_shuffle_v2f16_v4f16__7_1(ptr addrspace(1) inreg %ptr) {371; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_1:372; GFX900:       ; %bb.0:373; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)374; GFX900-NEXT:    ;;#ASMSTART375; GFX900-NEXT:    ; def v[0:1]376; GFX900-NEXT:    ;;#ASMEND377; GFX900-NEXT:    s_mov_b32 s4, 0x7060302378; GFX900-NEXT:    v_mov_b32_e32 v3, 0379; GFX900-NEXT:    ;;#ASMSTART380; GFX900-NEXT:    ; def v[1:2]381; GFX900-NEXT:    ;;#ASMEND382; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s4383; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]384; GFX900-NEXT:    s_waitcnt vmcnt(0)385; GFX900-NEXT:    s_setpc_b64 s[30:31]386;387; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_1:388; GFX90A:       ; %bb.0:389; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX90A-NEXT:    ;;#ASMSTART391; GFX90A-NEXT:    ; def v[0:1]392; GFX90A-NEXT:    ;;#ASMEND393; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302394; GFX90A-NEXT:    v_mov_b32_e32 v4, 0395; GFX90A-NEXT:    ;;#ASMSTART396; GFX90A-NEXT:    ; def v[2:3]397; GFX90A-NEXT:    ;;#ASMEND398; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s4399; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]400; GFX90A-NEXT:    s_waitcnt vmcnt(0)401; GFX90A-NEXT:    s_setpc_b64 s[30:31]402;403; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_1:404; GFX942:       ; %bb.0:405; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX942-NEXT:    ;;#ASMSTART407; GFX942-NEXT:    ; def v[0:1]408; GFX942-NEXT:    ;;#ASMEND409; GFX942-NEXT:    s_mov_b32 s2, 0x7060302410; GFX942-NEXT:    v_mov_b32_e32 v4, 0411; GFX942-NEXT:    ;;#ASMSTART412; GFX942-NEXT:    ; def v[2:3]413; GFX942-NEXT:    ;;#ASMEND414; GFX942-NEXT:    s_nop 0415; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s2416; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]417; GFX942-NEXT:    s_waitcnt vmcnt(0)418; GFX942-NEXT:    s_setpc_b64 s[30:31]419  %vec0 = call <4 x half> asm "; def $0", "=v"()420  %vec1 = call <4 x half> asm "; def $0", "=v"()421  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 1>422  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4423  ret void424}425 426define void @v_shuffle_v2f16_v4f16__7_2(ptr addrspace(1) inreg %ptr) {427; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_2:428; GFX900:       ; %bb.0:429; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)430; GFX900-NEXT:    ;;#ASMSTART431; GFX900-NEXT:    ; def v[0:1]432; GFX900-NEXT:    ;;#ASMEND433; GFX900-NEXT:    v_mov_b32_e32 v4, 0434; GFX900-NEXT:    ;;#ASMSTART435; GFX900-NEXT:    ; def v[2:3]436; GFX900-NEXT:    ;;#ASMEND437; GFX900-NEXT:    v_alignbit_b32 v0, v1, v3, 16438; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]439; GFX900-NEXT:    s_waitcnt vmcnt(0)440; GFX900-NEXT:    s_setpc_b64 s[30:31]441;442; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_2:443; GFX90A:       ; %bb.0:444; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)445; GFX90A-NEXT:    ;;#ASMSTART446; GFX90A-NEXT:    ; def v[0:1]447; GFX90A-NEXT:    ;;#ASMEND448; GFX90A-NEXT:    v_mov_b32_e32 v4, 0449; GFX90A-NEXT:    ;;#ASMSTART450; GFX90A-NEXT:    ; def v[2:3]451; GFX90A-NEXT:    ;;#ASMEND452; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v3, 16453; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]454; GFX90A-NEXT:    s_waitcnt vmcnt(0)455; GFX90A-NEXT:    s_setpc_b64 s[30:31]456;457; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_2:458; GFX942:       ; %bb.0:459; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)460; GFX942-NEXT:    ;;#ASMSTART461; GFX942-NEXT:    ; def v[0:1]462; GFX942-NEXT:    ;;#ASMEND463; GFX942-NEXT:    v_mov_b32_e32 v4, 0464; GFX942-NEXT:    ;;#ASMSTART465; GFX942-NEXT:    ; def v[2:3]466; GFX942-NEXT:    ;;#ASMEND467; GFX942-NEXT:    s_nop 0468; GFX942-NEXT:    v_alignbit_b32 v0, v1, v3, 16469; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]470; GFX942-NEXT:    s_waitcnt vmcnt(0)471; GFX942-NEXT:    s_setpc_b64 s[30:31]472  %vec0 = call <4 x half> asm "; def $0", "=v"()473  %vec1 = call <4 x half> asm "; def $0", "=v"()474  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 2>475  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4476  ret void477}478 479define void @v_shuffle_v2f16_v4f16__7_3(ptr addrspace(1) inreg %ptr) {480; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_3:481; GFX900:       ; %bb.0:482; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)483; GFX900-NEXT:    ;;#ASMSTART484; GFX900-NEXT:    ; def v[0:1]485; GFX900-NEXT:    ;;#ASMEND486; GFX900-NEXT:    s_mov_b32 s4, 0x7060302487; GFX900-NEXT:    v_mov_b32_e32 v4, 0488; GFX900-NEXT:    ;;#ASMSTART489; GFX900-NEXT:    ; def v[2:3]490; GFX900-NEXT:    ;;#ASMEND491; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s4492; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]493; GFX900-NEXT:    s_waitcnt vmcnt(0)494; GFX900-NEXT:    s_setpc_b64 s[30:31]495;496; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_3:497; GFX90A:       ; %bb.0:498; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX90A-NEXT:    ;;#ASMSTART500; GFX90A-NEXT:    ; def v[0:1]501; GFX90A-NEXT:    ;;#ASMEND502; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302503; GFX90A-NEXT:    v_mov_b32_e32 v4, 0504; GFX90A-NEXT:    ;;#ASMSTART505; GFX90A-NEXT:    ; def v[2:3]506; GFX90A-NEXT:    ;;#ASMEND507; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s4508; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]509; GFX90A-NEXT:    s_waitcnt vmcnt(0)510; GFX90A-NEXT:    s_setpc_b64 s[30:31]511;512; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_3:513; GFX942:       ; %bb.0:514; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX942-NEXT:    ;;#ASMSTART516; GFX942-NEXT:    ; def v[0:1]517; GFX942-NEXT:    ;;#ASMEND518; GFX942-NEXT:    s_mov_b32 s2, 0x7060302519; GFX942-NEXT:    v_mov_b32_e32 v4, 0520; GFX942-NEXT:    ;;#ASMSTART521; GFX942-NEXT:    ; def v[2:3]522; GFX942-NEXT:    ;;#ASMEND523; GFX942-NEXT:    s_nop 0524; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s2525; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]526; GFX942-NEXT:    s_waitcnt vmcnt(0)527; GFX942-NEXT:    s_setpc_b64 s[30:31]528  %vec0 = call <4 x half> asm "; def $0", "=v"()529  %vec1 = call <4 x half> asm "; def $0", "=v"()530  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 3>531  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4532  ret void533}534 535define void @v_shuffle_v2f16_v4f16__7_4(ptr addrspace(1) inreg %ptr) {536; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_4:537; GFX900:       ; %bb.0:538; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)539; GFX900-NEXT:    ;;#ASMSTART540; GFX900-NEXT:    ; def v[0:1]541; GFX900-NEXT:    ;;#ASMEND542; GFX900-NEXT:    v_mov_b32_e32 v2, 0543; GFX900-NEXT:    v_alignbit_b32 v0, v0, v1, 16544; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]545; GFX900-NEXT:    s_waitcnt vmcnt(0)546; GFX900-NEXT:    s_setpc_b64 s[30:31]547;548; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_4:549; GFX90A:       ; %bb.0:550; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX90A-NEXT:    ;;#ASMSTART552; GFX90A-NEXT:    ; def v[0:1]553; GFX90A-NEXT:    ;;#ASMEND554; GFX90A-NEXT:    v_mov_b32_e32 v2, 0555; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v1, 16556; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]557; GFX90A-NEXT:    s_waitcnt vmcnt(0)558; GFX90A-NEXT:    s_setpc_b64 s[30:31]559;560; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_4:561; GFX942:       ; %bb.0:562; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX942-NEXT:    ;;#ASMSTART564; GFX942-NEXT:    ; def v[0:1]565; GFX942-NEXT:    ;;#ASMEND566; GFX942-NEXT:    v_mov_b32_e32 v2, 0567; GFX942-NEXT:    v_alignbit_b32 v0, v0, v1, 16568; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]569; GFX942-NEXT:    s_waitcnt vmcnt(0)570; GFX942-NEXT:    s_setpc_b64 s[30:31]571  %vec0 = call <4 x half> asm "; def $0", "=v"()572  %vec1 = call <4 x half> asm "; def $0", "=v"()573  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 4>574  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4575  ret void576}577 578define void @v_shuffle_v2f16_v4f16__7_5(ptr addrspace(1) inreg %ptr) {579; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_5:580; GFX900:       ; %bb.0:581; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)582; GFX900-NEXT:    ;;#ASMSTART583; GFX900-NEXT:    ; def v[0:1]584; GFX900-NEXT:    ;;#ASMEND585; GFX900-NEXT:    s_mov_b32 s4, 0x7060302586; GFX900-NEXT:    v_mov_b32_e32 v2, 0587; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4588; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]589; GFX900-NEXT:    s_waitcnt vmcnt(0)590; GFX900-NEXT:    s_setpc_b64 s[30:31]591;592; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_5:593; GFX90A:       ; %bb.0:594; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)595; GFX90A-NEXT:    ;;#ASMSTART596; GFX90A-NEXT:    ; def v[0:1]597; GFX90A-NEXT:    ;;#ASMEND598; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302599; GFX90A-NEXT:    v_mov_b32_e32 v2, 0600; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4601; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]602; GFX90A-NEXT:    s_waitcnt vmcnt(0)603; GFX90A-NEXT:    s_setpc_b64 s[30:31]604;605; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_5:606; GFX942:       ; %bb.0:607; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)608; GFX942-NEXT:    ;;#ASMSTART609; GFX942-NEXT:    ; def v[0:1]610; GFX942-NEXT:    ;;#ASMEND611; GFX942-NEXT:    s_mov_b32 s2, 0x7060302612; GFX942-NEXT:    v_mov_b32_e32 v2, 0613; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s2614; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]615; GFX942-NEXT:    s_waitcnt vmcnt(0)616; GFX942-NEXT:    s_setpc_b64 s[30:31]617  %vec0 = call <4 x half> asm "; def $0", "=v"()618  %vec1 = call <4 x half> asm "; def $0", "=v"()619  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 5>620  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4621  ret void622}623 624define void @v_shuffle_v2f16_v4f16__7_6(ptr addrspace(1) inreg %ptr) {625; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_6:626; GFX900:       ; %bb.0:627; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GFX900-NEXT:    ;;#ASMSTART629; GFX900-NEXT:    ; def v[0:1]630; GFX900-NEXT:    ;;#ASMEND631; GFX900-NEXT:    v_mov_b32_e32 v2, 0632; GFX900-NEXT:    v_alignbit_b32 v0, v1, v1, 16633; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]634; GFX900-NEXT:    s_waitcnt vmcnt(0)635; GFX900-NEXT:    s_setpc_b64 s[30:31]636;637; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_6:638; GFX90A:       ; %bb.0:639; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)640; GFX90A-NEXT:    ;;#ASMSTART641; GFX90A-NEXT:    ; def v[0:1]642; GFX90A-NEXT:    ;;#ASMEND643; GFX90A-NEXT:    v_mov_b32_e32 v2, 0644; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v1, 16645; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]646; GFX90A-NEXT:    s_waitcnt vmcnt(0)647; GFX90A-NEXT:    s_setpc_b64 s[30:31]648;649; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_6:650; GFX942:       ; %bb.0:651; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX942-NEXT:    ;;#ASMSTART653; GFX942-NEXT:    ; def v[0:1]654; GFX942-NEXT:    ;;#ASMEND655; GFX942-NEXT:    v_mov_b32_e32 v2, 0656; GFX942-NEXT:    v_alignbit_b32 v0, v1, v1, 16657; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]658; GFX942-NEXT:    s_waitcnt vmcnt(0)659; GFX942-NEXT:    s_setpc_b64 s[30:31]660  %vec0 = call <4 x half> asm "; def $0", "=v"()661  %vec1 = call <4 x half> asm "; def $0", "=v"()662  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 6>663  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4664  ret void665}666 667define void @v_shuffle_v2f16_v4f16__7_7(ptr addrspace(1) inreg %ptr) {668; GFX900-LABEL: v_shuffle_v2f16_v4f16__7_7:669; GFX900:       ; %bb.0:670; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX900-NEXT:    ;;#ASMSTART672; GFX900-NEXT:    ; def v[0:1]673; GFX900-NEXT:    ;;#ASMEND674; GFX900-NEXT:    s_mov_b32 s4, 0x7060302675; GFX900-NEXT:    v_mov_b32_e32 v2, 0676; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4677; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]678; GFX900-NEXT:    s_waitcnt vmcnt(0)679; GFX900-NEXT:    s_setpc_b64 s[30:31]680;681; GFX90A-LABEL: v_shuffle_v2f16_v4f16__7_7:682; GFX90A:       ; %bb.0:683; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)684; GFX90A-NEXT:    ;;#ASMSTART685; GFX90A-NEXT:    ; def v[0:1]686; GFX90A-NEXT:    ;;#ASMEND687; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302688; GFX90A-NEXT:    v_mov_b32_e32 v2, 0689; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4690; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]691; GFX90A-NEXT:    s_waitcnt vmcnt(0)692; GFX90A-NEXT:    s_setpc_b64 s[30:31]693;694; GFX942-LABEL: v_shuffle_v2f16_v4f16__7_7:695; GFX942:       ; %bb.0:696; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX942-NEXT:    ;;#ASMSTART698; GFX942-NEXT:    ; def v[0:1]699; GFX942-NEXT:    ;;#ASMEND700; GFX942-NEXT:    s_mov_b32 s2, 0x7060302701; GFX942-NEXT:    v_mov_b32_e32 v2, 0702; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s2703; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]704; GFX942-NEXT:    s_waitcnt vmcnt(0)705; GFX942-NEXT:    s_setpc_b64 s[30:31]706  %vec0 = call <4 x half> asm "; def $0", "=v"()707  %vec1 = call <4 x half> asm "; def $0", "=v"()708  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 7>709  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4710  ret void711}712 713define void @v_shuffle_v2f16_v4f16__u_0(ptr addrspace(1) inreg %ptr) {714; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_0:715; GFX900:       ; %bb.0:716; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)717; GFX900-NEXT:    ;;#ASMSTART718; GFX900-NEXT:    ; def v[0:1]719; GFX900-NEXT:    ;;#ASMEND720; GFX900-NEXT:    v_mov_b32_e32 v2, 0721; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0722; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]723; GFX900-NEXT:    s_waitcnt vmcnt(0)724; GFX900-NEXT:    s_setpc_b64 s[30:31]725;726; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_0:727; GFX90A:       ; %bb.0:728; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)729; GFX90A-NEXT:    ;;#ASMSTART730; GFX90A-NEXT:    ; def v[0:1]731; GFX90A-NEXT:    ;;#ASMEND732; GFX90A-NEXT:    v_mov_b32_e32 v2, 0733; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0734; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]735; GFX90A-NEXT:    s_waitcnt vmcnt(0)736; GFX90A-NEXT:    s_setpc_b64 s[30:31]737;738; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_0:739; GFX942:       ; %bb.0:740; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX942-NEXT:    ;;#ASMSTART742; GFX942-NEXT:    ; def v[0:1]743; GFX942-NEXT:    ;;#ASMEND744; GFX942-NEXT:    v_mov_b32_e32 v2, 0745; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v0746; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]747; GFX942-NEXT:    s_waitcnt vmcnt(0)748; GFX942-NEXT:    s_setpc_b64 s[30:31]749  %vec0 = call <4 x half> asm "; def $0", "=v"()750  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 0>751  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4752  ret void753}754 755define void @v_shuffle_v2f16_v4f16__0_0(ptr addrspace(1) inreg %ptr) {756; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_0:757; GFX900:       ; %bb.0:758; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX900-NEXT:    ;;#ASMSTART760; GFX900-NEXT:    ; def v[0:1]761; GFX900-NEXT:    ;;#ASMEND762; GFX900-NEXT:    s_mov_b32 s4, 0x5040100763; GFX900-NEXT:    v_mov_b32_e32 v2, 0764; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4765; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]766; GFX900-NEXT:    s_waitcnt vmcnt(0)767; GFX900-NEXT:    s_setpc_b64 s[30:31]768;769; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_0:770; GFX90A:       ; %bb.0:771; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)772; GFX90A-NEXT:    ;;#ASMSTART773; GFX90A-NEXT:    ; def v[0:1]774; GFX90A-NEXT:    ;;#ASMEND775; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100776; GFX90A-NEXT:    v_mov_b32_e32 v2, 0777; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4778; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]779; GFX90A-NEXT:    s_waitcnt vmcnt(0)780; GFX90A-NEXT:    s_setpc_b64 s[30:31]781;782; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_0:783; GFX942:       ; %bb.0:784; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)785; GFX942-NEXT:    ;;#ASMSTART786; GFX942-NEXT:    ; def v[0:1]787; GFX942-NEXT:    ;;#ASMEND788; GFX942-NEXT:    s_mov_b32 s2, 0x5040100789; GFX942-NEXT:    v_mov_b32_e32 v2, 0790; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s2791; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]792; GFX942-NEXT:    s_waitcnt vmcnt(0)793; GFX942-NEXT:    s_setpc_b64 s[30:31]794  %vec0 = call <4 x half> asm "; def $0", "=v"()795  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> zeroinitializer796  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4797  ret void798}799 800define void @v_shuffle_v2f16_v4f16__1_0(ptr addrspace(1) inreg %ptr) {801; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_0:802; GFX900:       ; %bb.0:803; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)804; GFX900-NEXT:    ;;#ASMSTART805; GFX900-NEXT:    ; def v[0:1]806; GFX900-NEXT:    ;;#ASMEND807; GFX900-NEXT:    v_mov_b32_e32 v2, 0808; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16809; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]810; GFX900-NEXT:    s_waitcnt vmcnt(0)811; GFX900-NEXT:    s_setpc_b64 s[30:31]812;813; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_0:814; GFX90A:       ; %bb.0:815; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)816; GFX90A-NEXT:    ;;#ASMSTART817; GFX90A-NEXT:    ; def v[0:1]818; GFX90A-NEXT:    ;;#ASMEND819; GFX90A-NEXT:    v_mov_b32_e32 v2, 0820; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16821; GFX90A-NEXT:    global_store_dword v2, v0, 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_v2f16_v4f16__1_0:826; GFX942:       ; %bb.0:827; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX942-NEXT:    ;;#ASMSTART829; GFX942-NEXT:    ; def v[0:1]830; GFX942-NEXT:    ;;#ASMEND831; GFX942-NEXT:    v_mov_b32_e32 v2, 0832; GFX942-NEXT:    v_alignbit_b32 v0, v0, v0, 16833; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]834; GFX942-NEXT:    s_waitcnt vmcnt(0)835; GFX942-NEXT:    s_setpc_b64 s[30:31]836  %vec0 = call <4 x half> asm "; def $0", "=v"()837  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 0>838  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4839  ret void840}841 842define void @v_shuffle_v2f16_v4f16__2_0(ptr addrspace(1) inreg %ptr) {843; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_0:844; GFX900:       ; %bb.0:845; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX900-NEXT:    ;;#ASMSTART847; GFX900-NEXT:    ; def v[0:1]848; GFX900-NEXT:    ;;#ASMEND849; GFX900-NEXT:    s_mov_b32 s4, 0x5040100850; GFX900-NEXT:    v_mov_b32_e32 v2, 0851; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4852; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]853; GFX900-NEXT:    s_waitcnt vmcnt(0)854; GFX900-NEXT:    s_setpc_b64 s[30:31]855;856; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_0:857; GFX90A:       ; %bb.0:858; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)859; GFX90A-NEXT:    ;;#ASMSTART860; GFX90A-NEXT:    ; def v[0:1]861; GFX90A-NEXT:    ;;#ASMEND862; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100863; GFX90A-NEXT:    v_mov_b32_e32 v2, 0864; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4865; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]866; GFX90A-NEXT:    s_waitcnt vmcnt(0)867; GFX90A-NEXT:    s_setpc_b64 s[30:31]868;869; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_0:870; GFX942:       ; %bb.0:871; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)872; GFX942-NEXT:    ;;#ASMSTART873; GFX942-NEXT:    ; def v[0:1]874; GFX942-NEXT:    ;;#ASMEND875; GFX942-NEXT:    s_mov_b32 s2, 0x5040100876; GFX942-NEXT:    v_mov_b32_e32 v2, 0877; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s2878; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]879; GFX942-NEXT:    s_waitcnt vmcnt(0)880; GFX942-NEXT:    s_setpc_b64 s[30:31]881  %vec0 = call <4 x half> asm "; def $0", "=v"()882  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 0>883  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4884  ret void885}886 887define void @v_shuffle_v2f16_v4f16__3_0(ptr addrspace(1) inreg %ptr) {888; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_0:889; GFX900:       ; %bb.0:890; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX900-NEXT:    ;;#ASMSTART892; GFX900-NEXT:    ; def v[0:1]893; GFX900-NEXT:    ;;#ASMEND894; GFX900-NEXT:    v_mov_b32_e32 v2, 0895; GFX900-NEXT:    v_alignbit_b32 v0, v0, v1, 16896; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]897; GFX900-NEXT:    s_waitcnt vmcnt(0)898; GFX900-NEXT:    s_setpc_b64 s[30:31]899;900; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_0:901; GFX90A:       ; %bb.0:902; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)903; GFX90A-NEXT:    ;;#ASMSTART904; GFX90A-NEXT:    ; def v[0:1]905; GFX90A-NEXT:    ;;#ASMEND906; GFX90A-NEXT:    v_mov_b32_e32 v2, 0907; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v1, 16908; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]909; GFX90A-NEXT:    s_waitcnt vmcnt(0)910; GFX90A-NEXT:    s_setpc_b64 s[30:31]911;912; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_0:913; GFX942:       ; %bb.0:914; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GFX942-NEXT:    ;;#ASMSTART916; GFX942-NEXT:    ; def v[0:1]917; GFX942-NEXT:    ;;#ASMEND918; GFX942-NEXT:    v_mov_b32_e32 v2, 0919; GFX942-NEXT:    v_alignbit_b32 v0, v0, v1, 16920; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]921; GFX942-NEXT:    s_waitcnt vmcnt(0)922; GFX942-NEXT:    s_setpc_b64 s[30:31]923  %vec0 = call <4 x half> asm "; def $0", "=v"()924  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 0>925  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4926  ret void927}928 929define void @v_shuffle_v2f16_v4f16__4_0(ptr addrspace(1) inreg %ptr) {930; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_0:931; GFX900:       ; %bb.0:932; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GFX900-NEXT:    ;;#ASMSTART934; GFX900-NEXT:    ; def v[0:1]935; GFX900-NEXT:    ;;#ASMEND936; GFX900-NEXT:    v_mov_b32_e32 v2, 0937; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0938; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]939; GFX900-NEXT:    s_waitcnt vmcnt(0)940; GFX900-NEXT:    s_setpc_b64 s[30:31]941;942; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_0:943; GFX90A:       ; %bb.0:944; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)945; GFX90A-NEXT:    ;;#ASMSTART946; GFX90A-NEXT:    ; def v[0:1]947; GFX90A-NEXT:    ;;#ASMEND948; GFX90A-NEXT:    v_mov_b32_e32 v2, 0949; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0950; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]951; GFX90A-NEXT:    s_waitcnt vmcnt(0)952; GFX90A-NEXT:    s_setpc_b64 s[30:31]953;954; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_0:955; GFX942:       ; %bb.0:956; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)957; GFX942-NEXT:    ;;#ASMSTART958; GFX942-NEXT:    ; def v[0:1]959; GFX942-NEXT:    ;;#ASMEND960; GFX942-NEXT:    v_mov_b32_e32 v2, 0961; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v0962; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]963; GFX942-NEXT:    s_waitcnt vmcnt(0)964; GFX942-NEXT:    s_setpc_b64 s[30:31]965  %vec0 = call <4 x half> asm "; def $0", "=v"()966  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 0>967  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 4968  ret void969}970 971define void @v_shuffle_v2f16_v4f16__5_0(ptr addrspace(1) inreg %ptr) {972; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_0:973; GFX900:       ; %bb.0:974; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)975; GFX900-NEXT:    ;;#ASMSTART976; GFX900-NEXT:    ; def v[0:1]977; GFX900-NEXT:    ;;#ASMEND978; GFX900-NEXT:    v_mov_b32_e32 v3, 0979; GFX900-NEXT:    ;;#ASMSTART980; GFX900-NEXT:    ; def v[1:2]981; GFX900-NEXT:    ;;#ASMEND982; GFX900-NEXT:    v_alignbit_b32 v0, v0, v1, 16983; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]984; GFX900-NEXT:    s_waitcnt vmcnt(0)985; GFX900-NEXT:    s_setpc_b64 s[30:31]986;987; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_0:988; GFX90A:       ; %bb.0:989; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)990; GFX90A-NEXT:    ;;#ASMSTART991; GFX90A-NEXT:    ; def v[0:1]992; GFX90A-NEXT:    ;;#ASMEND993; GFX90A-NEXT:    v_mov_b32_e32 v4, 0994; GFX90A-NEXT:    ;;#ASMSTART995; GFX90A-NEXT:    ; def v[2:3]996; GFX90A-NEXT:    ;;#ASMEND997; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v2, 16998; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]999; GFX90A-NEXT:    s_waitcnt vmcnt(0)1000; GFX90A-NEXT:    s_setpc_b64 s[30:31]1001;1002; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_0:1003; GFX942:       ; %bb.0:1004; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1005; GFX942-NEXT:    ;;#ASMSTART1006; GFX942-NEXT:    ; def v[0:1]1007; GFX942-NEXT:    ;;#ASMEND1008; GFX942-NEXT:    v_mov_b32_e32 v4, 01009; GFX942-NEXT:    ;;#ASMSTART1010; GFX942-NEXT:    ; def v[2:3]1011; GFX942-NEXT:    ;;#ASMEND1012; GFX942-NEXT:    s_nop 01013; GFX942-NEXT:    v_alignbit_b32 v0, v0, v2, 161014; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1015; GFX942-NEXT:    s_waitcnt vmcnt(0)1016; GFX942-NEXT:    s_setpc_b64 s[30:31]1017  %vec0 = call <4 x half> asm "; def $0", "=v"()1018  %vec1 = call <4 x half> asm "; def $0", "=v"()1019  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 0>1020  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41021  ret void1022}1023 1024define void @v_shuffle_v2f16_v4f16__6_0(ptr addrspace(1) inreg %ptr) {1025; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_0:1026; GFX900:       ; %bb.0:1027; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1028; GFX900-NEXT:    ;;#ASMSTART1029; GFX900-NEXT:    ; def v[0:1]1030; GFX900-NEXT:    ;;#ASMEND1031; GFX900-NEXT:    s_mov_b32 s4, 0x50401001032; GFX900-NEXT:    v_mov_b32_e32 v3, 01033; GFX900-NEXT:    ;;#ASMSTART1034; GFX900-NEXT:    ; def v[1:2]1035; GFX900-NEXT:    ;;#ASMEND1036; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s41037; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1038; GFX900-NEXT:    s_waitcnt vmcnt(0)1039; GFX900-NEXT:    s_setpc_b64 s[30:31]1040;1041; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_0:1042; GFX90A:       ; %bb.0:1043; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1044; GFX90A-NEXT:    ;;#ASMSTART1045; GFX90A-NEXT:    ; def v[0:1]1046; GFX90A-NEXT:    ;;#ASMEND1047; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001048; GFX90A-NEXT:    v_mov_b32_e32 v4, 01049; GFX90A-NEXT:    ;;#ASMSTART1050; GFX90A-NEXT:    ; def v[2:3]1051; GFX90A-NEXT:    ;;#ASMEND1052; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s41053; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1054; GFX90A-NEXT:    s_waitcnt vmcnt(0)1055; GFX90A-NEXT:    s_setpc_b64 s[30:31]1056;1057; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_0:1058; GFX942:       ; %bb.0:1059; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1060; GFX942-NEXT:    ;;#ASMSTART1061; GFX942-NEXT:    ; def v[0:1]1062; GFX942-NEXT:    ;;#ASMEND1063; GFX942-NEXT:    s_mov_b32 s2, 0x50401001064; GFX942-NEXT:    v_mov_b32_e32 v4, 01065; GFX942-NEXT:    ;;#ASMSTART1066; GFX942-NEXT:    ; def v[2:3]1067; GFX942-NEXT:    ;;#ASMEND1068; GFX942-NEXT:    s_nop 01069; GFX942-NEXT:    v_perm_b32 v0, v0, v3, s21070; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1071; GFX942-NEXT:    s_waitcnt vmcnt(0)1072; GFX942-NEXT:    s_setpc_b64 s[30:31]1073  %vec0 = call <4 x half> asm "; def $0", "=v"()1074  %vec1 = call <4 x half> asm "; def $0", "=v"()1075  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 0>1076  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41077  ret void1078}1079 1080define void @v_shuffle_v2f16_v4f16__u_1(ptr addrspace(1) inreg %ptr) {1081; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_1:1082; GFX900:       ; %bb.0:1083; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX900-NEXT:    v_mov_b32_e32 v2, 01085; GFX900-NEXT:    ;;#ASMSTART1086; GFX900-NEXT:    ; def v[0:1]1087; GFX900-NEXT:    ;;#ASMEND1088; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1089; GFX900-NEXT:    s_waitcnt vmcnt(0)1090; GFX900-NEXT:    s_setpc_b64 s[30:31]1091;1092; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_1:1093; GFX90A:       ; %bb.0:1094; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1095; GFX90A-NEXT:    v_mov_b32_e32 v2, 01096; GFX90A-NEXT:    ;;#ASMSTART1097; GFX90A-NEXT:    ; def v[0:1]1098; GFX90A-NEXT:    ;;#ASMEND1099; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1100; GFX90A-NEXT:    s_waitcnt vmcnt(0)1101; GFX90A-NEXT:    s_setpc_b64 s[30:31]1102;1103; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_1:1104; GFX942:       ; %bb.0:1105; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1106; GFX942-NEXT:    v_mov_b32_e32 v2, 01107; GFX942-NEXT:    ;;#ASMSTART1108; GFX942-NEXT:    ; def v[0:1]1109; GFX942-NEXT:    ;;#ASMEND1110; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1111; GFX942-NEXT:    s_waitcnt vmcnt(0)1112; GFX942-NEXT:    s_setpc_b64 s[30:31]1113  %vec0 = call <4 x half> asm "; def $0", "=v"()1114  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 1>1115  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41116  ret void1117}1118 1119define void @v_shuffle_v2f16_v4f16__0_1(ptr addrspace(1) inreg %ptr) {1120; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_1:1121; GFX900:       ; %bb.0:1122; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1123; GFX900-NEXT:    v_mov_b32_e32 v2, 01124; GFX900-NEXT:    ;;#ASMSTART1125; GFX900-NEXT:    ; def v[0:1]1126; GFX900-NEXT:    ;;#ASMEND1127; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1128; GFX900-NEXT:    s_waitcnt vmcnt(0)1129; GFX900-NEXT:    s_setpc_b64 s[30:31]1130;1131; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_1:1132; GFX90A:       ; %bb.0:1133; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1134; GFX90A-NEXT:    v_mov_b32_e32 v2, 01135; GFX90A-NEXT:    ;;#ASMSTART1136; GFX90A-NEXT:    ; def v[0:1]1137; GFX90A-NEXT:    ;;#ASMEND1138; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1139; GFX90A-NEXT:    s_waitcnt vmcnt(0)1140; GFX90A-NEXT:    s_setpc_b64 s[30:31]1141;1142; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_1:1143; GFX942:       ; %bb.0:1144; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1145; GFX942-NEXT:    v_mov_b32_e32 v2, 01146; GFX942-NEXT:    ;;#ASMSTART1147; GFX942-NEXT:    ; def v[0:1]1148; GFX942-NEXT:    ;;#ASMEND1149; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1150; GFX942-NEXT:    s_waitcnt vmcnt(0)1151; GFX942-NEXT:    s_setpc_b64 s[30:31]1152  %vec0 = call <4 x half> asm "; def $0", "=v"()1153  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 1>1154  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41155  ret void1156}1157 1158define void @v_shuffle_v2f16_v4f16__1_1(ptr addrspace(1) inreg %ptr) {1159; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_1:1160; GFX900:       ; %bb.0:1161; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1162; GFX900-NEXT:    ;;#ASMSTART1163; GFX900-NEXT:    ; def v[0:1]1164; GFX900-NEXT:    ;;#ASMEND1165; GFX900-NEXT:    s_mov_b32 s4, 0x70603021166; GFX900-NEXT:    v_mov_b32_e32 v2, 01167; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s41168; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1169; GFX900-NEXT:    s_waitcnt vmcnt(0)1170; GFX900-NEXT:    s_setpc_b64 s[30:31]1171;1172; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_1:1173; GFX90A:       ; %bb.0:1174; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1175; GFX90A-NEXT:    ;;#ASMSTART1176; GFX90A-NEXT:    ; def v[0:1]1177; GFX90A-NEXT:    ;;#ASMEND1178; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021179; GFX90A-NEXT:    v_mov_b32_e32 v2, 01180; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s41181; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1182; GFX90A-NEXT:    s_waitcnt vmcnt(0)1183; GFX90A-NEXT:    s_setpc_b64 s[30:31]1184;1185; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_1:1186; GFX942:       ; %bb.0:1187; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1188; GFX942-NEXT:    ;;#ASMSTART1189; GFX942-NEXT:    ; def v[0:1]1190; GFX942-NEXT:    ;;#ASMEND1191; GFX942-NEXT:    s_mov_b32 s2, 0x70603021192; GFX942-NEXT:    v_mov_b32_e32 v2, 01193; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s21194; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1195; GFX942-NEXT:    s_waitcnt vmcnt(0)1196; GFX942-NEXT:    s_setpc_b64 s[30:31]1197  %vec0 = call <4 x half> asm "; def $0", "=v"()1198  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 1>1199  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41200  ret void1201}1202 1203define void @v_shuffle_v2f16_v4f16__2_1(ptr addrspace(1) inreg %ptr) {1204; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_1:1205; GFX900:       ; %bb.0:1206; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1207; GFX900-NEXT:    ;;#ASMSTART1208; GFX900-NEXT:    ; def v[0:1]1209; GFX900-NEXT:    ;;#ASMEND1210; GFX900-NEXT:    s_mov_b32 s4, 0xffff1211; GFX900-NEXT:    v_mov_b32_e32 v2, 01212; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v01213; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1214; GFX900-NEXT:    s_waitcnt vmcnt(0)1215; GFX900-NEXT:    s_setpc_b64 s[30:31]1216;1217; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_1:1218; GFX90A:       ; %bb.0:1219; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1220; GFX90A-NEXT:    ;;#ASMSTART1221; GFX90A-NEXT:    ; def v[0:1]1222; GFX90A-NEXT:    ;;#ASMEND1223; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1224; GFX90A-NEXT:    v_mov_b32_e32 v2, 01225; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v01226; GFX90A-NEXT:    global_store_dword v2, v0, 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_v2f16_v4f16__2_1:1231; GFX942:       ; %bb.0:1232; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1233; GFX942-NEXT:    ;;#ASMSTART1234; GFX942-NEXT:    ; def v[0:1]1235; GFX942-NEXT:    ;;#ASMEND1236; GFX942-NEXT:    s_mov_b32 s2, 0xffff1237; GFX942-NEXT:    v_mov_b32_e32 v2, 01238; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v01239; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1240; GFX942-NEXT:    s_waitcnt vmcnt(0)1241; GFX942-NEXT:    s_setpc_b64 s[30:31]1242  %vec0 = call <4 x half> asm "; def $0", "=v"()1243  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 1>1244  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41245  ret void1246}1247 1248define void @v_shuffle_v2f16_v4f16__3_1(ptr addrspace(1) inreg %ptr) {1249; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_1:1250; GFX900:       ; %bb.0:1251; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX900-NEXT:    ;;#ASMSTART1253; GFX900-NEXT:    ; def v[0:1]1254; GFX900-NEXT:    ;;#ASMEND1255; GFX900-NEXT:    s_mov_b32 s4, 0x70603021256; GFX900-NEXT:    v_mov_b32_e32 v2, 01257; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s41258; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1259; GFX900-NEXT:    s_waitcnt vmcnt(0)1260; GFX900-NEXT:    s_setpc_b64 s[30:31]1261;1262; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_1:1263; GFX90A:       ; %bb.0:1264; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1265; GFX90A-NEXT:    ;;#ASMSTART1266; GFX90A-NEXT:    ; def v[0:1]1267; GFX90A-NEXT:    ;;#ASMEND1268; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021269; GFX90A-NEXT:    v_mov_b32_e32 v2, 01270; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s41271; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1272; GFX90A-NEXT:    s_waitcnt vmcnt(0)1273; GFX90A-NEXT:    s_setpc_b64 s[30:31]1274;1275; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_1:1276; GFX942:       ; %bb.0:1277; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1278; GFX942-NEXT:    ;;#ASMSTART1279; GFX942-NEXT:    ; def v[0:1]1280; GFX942-NEXT:    ;;#ASMEND1281; GFX942-NEXT:    s_mov_b32 s2, 0x70603021282; GFX942-NEXT:    v_mov_b32_e32 v2, 01283; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s21284; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1285; GFX942-NEXT:    s_waitcnt vmcnt(0)1286; GFX942-NEXT:    s_setpc_b64 s[30:31]1287  %vec0 = call <4 x half> asm "; def $0", "=v"()1288  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 1>1289  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41290  ret void1291}1292 1293define void @v_shuffle_v2f16_v4f16__4_1(ptr addrspace(1) inreg %ptr) {1294; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_1:1295; GFX900:       ; %bb.0:1296; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1297; GFX900-NEXT:    v_mov_b32_e32 v2, 01298; GFX900-NEXT:    ;;#ASMSTART1299; GFX900-NEXT:    ; def v[0:1]1300; GFX900-NEXT:    ;;#ASMEND1301; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1302; GFX900-NEXT:    s_waitcnt vmcnt(0)1303; GFX900-NEXT:    s_setpc_b64 s[30:31]1304;1305; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_1:1306; GFX90A:       ; %bb.0:1307; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1308; GFX90A-NEXT:    v_mov_b32_e32 v2, 01309; GFX90A-NEXT:    ;;#ASMSTART1310; GFX90A-NEXT:    ; def v[0:1]1311; GFX90A-NEXT:    ;;#ASMEND1312; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1313; GFX90A-NEXT:    s_waitcnt vmcnt(0)1314; GFX90A-NEXT:    s_setpc_b64 s[30:31]1315;1316; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_1:1317; GFX942:       ; %bb.0:1318; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1319; GFX942-NEXT:    v_mov_b32_e32 v2, 01320; GFX942-NEXT:    ;;#ASMSTART1321; GFX942-NEXT:    ; def v[0:1]1322; GFX942-NEXT:    ;;#ASMEND1323; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1324; GFX942-NEXT:    s_waitcnt vmcnt(0)1325; GFX942-NEXT:    s_setpc_b64 s[30:31]1326  %vec0 = call <4 x half> asm "; def $0", "=v"()1327  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 1>1328  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41329  ret void1330}1331 1332define void @v_shuffle_v2f16_v4f16__5_1(ptr addrspace(1) inreg %ptr) {1333; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_1:1334; GFX900:       ; %bb.0:1335; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1336; GFX900-NEXT:    ;;#ASMSTART1337; GFX900-NEXT:    ; def v[0:1]1338; GFX900-NEXT:    ;;#ASMEND1339; GFX900-NEXT:    s_mov_b32 s4, 0x70603021340; GFX900-NEXT:    v_mov_b32_e32 v3, 01341; GFX900-NEXT:    ;;#ASMSTART1342; GFX900-NEXT:    ; def v[1:2]1343; GFX900-NEXT:    ;;#ASMEND1344; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s41345; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1346; GFX900-NEXT:    s_waitcnt vmcnt(0)1347; GFX900-NEXT:    s_setpc_b64 s[30:31]1348;1349; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_1:1350; GFX90A:       ; %bb.0:1351; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1352; GFX90A-NEXT:    ;;#ASMSTART1353; GFX90A-NEXT:    ; def v[0:1]1354; GFX90A-NEXT:    ;;#ASMEND1355; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021356; GFX90A-NEXT:    v_mov_b32_e32 v4, 01357; GFX90A-NEXT:    ;;#ASMSTART1358; GFX90A-NEXT:    ; def v[2:3]1359; GFX90A-NEXT:    ;;#ASMEND1360; GFX90A-NEXT:    v_perm_b32 v0, v0, v2, s41361; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1362; GFX90A-NEXT:    s_waitcnt vmcnt(0)1363; GFX90A-NEXT:    s_setpc_b64 s[30:31]1364;1365; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_1:1366; GFX942:       ; %bb.0:1367; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1368; GFX942-NEXT:    ;;#ASMSTART1369; GFX942-NEXT:    ; def v[0:1]1370; GFX942-NEXT:    ;;#ASMEND1371; GFX942-NEXT:    s_mov_b32 s2, 0x70603021372; GFX942-NEXT:    v_mov_b32_e32 v4, 01373; GFX942-NEXT:    ;;#ASMSTART1374; GFX942-NEXT:    ; def v[2:3]1375; GFX942-NEXT:    ;;#ASMEND1376; GFX942-NEXT:    s_nop 01377; GFX942-NEXT:    v_perm_b32 v0, v0, v2, s21378; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1379; GFX942-NEXT:    s_waitcnt vmcnt(0)1380; GFX942-NEXT:    s_setpc_b64 s[30:31]1381  %vec0 = call <4 x half> asm "; def $0", "=v"()1382  %vec1 = call <4 x half> asm "; def $0", "=v"()1383  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 1>1384  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41385  ret void1386}1387 1388define void @v_shuffle_v2f16_v4f16__6_1(ptr addrspace(1) inreg %ptr) {1389; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_1:1390; GFX900:       ; %bb.0:1391; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX900-NEXT:    ;;#ASMSTART1393; GFX900-NEXT:    ; def v[0:1]1394; GFX900-NEXT:    ;;#ASMEND1395; GFX900-NEXT:    s_mov_b32 s4, 0xffff1396; GFX900-NEXT:    v_mov_b32_e32 v3, 01397; GFX900-NEXT:    ;;#ASMSTART1398; GFX900-NEXT:    ; def v[1:2]1399; GFX900-NEXT:    ;;#ASMEND1400; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v01401; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]1402; GFX900-NEXT:    s_waitcnt vmcnt(0)1403; GFX900-NEXT:    s_setpc_b64 s[30:31]1404;1405; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_1:1406; GFX90A:       ; %bb.0:1407; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1408; GFX90A-NEXT:    ;;#ASMSTART1409; GFX90A-NEXT:    ; def v[0:1]1410; GFX90A-NEXT:    ;;#ASMEND1411; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1412; GFX90A-NEXT:    v_mov_b32_e32 v4, 01413; GFX90A-NEXT:    ;;#ASMSTART1414; GFX90A-NEXT:    ; def v[2:3]1415; GFX90A-NEXT:    ;;#ASMEND1416; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v01417; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1418; GFX90A-NEXT:    s_waitcnt vmcnt(0)1419; GFX90A-NEXT:    s_setpc_b64 s[30:31]1420;1421; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_1:1422; GFX942:       ; %bb.0:1423; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1424; GFX942-NEXT:    ;;#ASMSTART1425; GFX942-NEXT:    ; def v[0:1]1426; GFX942-NEXT:    ;;#ASMEND1427; GFX942-NEXT:    s_mov_b32 s2, 0xffff1428; GFX942-NEXT:    v_mov_b32_e32 v4, 01429; GFX942-NEXT:    ;;#ASMSTART1430; GFX942-NEXT:    ; def v[2:3]1431; GFX942-NEXT:    ;;#ASMEND1432; GFX942-NEXT:    s_nop 01433; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v01434; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1435; GFX942-NEXT:    s_waitcnt vmcnt(0)1436; GFX942-NEXT:    s_setpc_b64 s[30:31]1437  %vec0 = call <4 x half> asm "; def $0", "=v"()1438  %vec1 = call <4 x half> asm "; def $0", "=v"()1439  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 1>1440  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41441  ret void1442}1443 1444define void @v_shuffle_v2f16_v4f16__u_2(ptr addrspace(1) inreg %ptr) {1445; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_2:1446; GFX900:       ; %bb.0:1447; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX900-NEXT:    ;;#ASMSTART1449; GFX900-NEXT:    ; def v[0:1]1450; GFX900-NEXT:    ;;#ASMEND1451; GFX900-NEXT:    v_mov_b32_e32 v2, 01452; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v11453; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1454; GFX900-NEXT:    s_waitcnt vmcnt(0)1455; GFX900-NEXT:    s_setpc_b64 s[30:31]1456;1457; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_2:1458; GFX90A:       ; %bb.0:1459; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX90A-NEXT:    ;;#ASMSTART1461; GFX90A-NEXT:    ; def v[0:1]1462; GFX90A-NEXT:    ;;#ASMEND1463; GFX90A-NEXT:    v_mov_b32_e32 v2, 01464; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v11465; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1466; GFX90A-NEXT:    s_waitcnt vmcnt(0)1467; GFX90A-NEXT:    s_setpc_b64 s[30:31]1468;1469; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_2:1470; GFX942:       ; %bb.0:1471; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1472; GFX942-NEXT:    ;;#ASMSTART1473; GFX942-NEXT:    ; def v[0:1]1474; GFX942-NEXT:    ;;#ASMEND1475; GFX942-NEXT:    v_mov_b32_e32 v2, 01476; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v11477; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1478; GFX942-NEXT:    s_waitcnt vmcnt(0)1479; GFX942-NEXT:    s_setpc_b64 s[30:31]1480  %vec0 = call <4 x half> asm "; def $0", "=v"()1481  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 2>1482  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41483  ret void1484}1485 1486define void @v_shuffle_v2f16_v4f16__0_2(ptr addrspace(1) inreg %ptr) {1487; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_2:1488; GFX900:       ; %bb.0:1489; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1490; GFX900-NEXT:    ;;#ASMSTART1491; GFX900-NEXT:    ; def v[0:1]1492; GFX900-NEXT:    ;;#ASMEND1493; GFX900-NEXT:    s_mov_b32 s4, 0x50401001494; GFX900-NEXT:    v_mov_b32_e32 v2, 01495; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s41496; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1497; GFX900-NEXT:    s_waitcnt vmcnt(0)1498; GFX900-NEXT:    s_setpc_b64 s[30:31]1499;1500; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_2:1501; GFX90A:       ; %bb.0:1502; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1503; GFX90A-NEXT:    ;;#ASMSTART1504; GFX90A-NEXT:    ; def v[0:1]1505; GFX90A-NEXT:    ;;#ASMEND1506; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001507; GFX90A-NEXT:    v_mov_b32_e32 v2, 01508; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s41509; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1510; GFX90A-NEXT:    s_waitcnt vmcnt(0)1511; GFX90A-NEXT:    s_setpc_b64 s[30:31]1512;1513; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_2:1514; GFX942:       ; %bb.0:1515; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1516; GFX942-NEXT:    ;;#ASMSTART1517; GFX942-NEXT:    ; def v[0:1]1518; GFX942-NEXT:    ;;#ASMEND1519; GFX942-NEXT:    s_mov_b32 s2, 0x50401001520; GFX942-NEXT:    v_mov_b32_e32 v2, 01521; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s21522; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1523; GFX942-NEXT:    s_waitcnt vmcnt(0)1524; GFX942-NEXT:    s_setpc_b64 s[30:31]1525  %vec0 = call <4 x half> asm "; def $0", "=v"()1526  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 2>1527  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41528  ret void1529}1530 1531define void @v_shuffle_v2f16_v4f16__1_2(ptr addrspace(1) inreg %ptr) {1532; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_2:1533; GFX900:       ; %bb.0:1534; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1535; GFX900-NEXT:    ;;#ASMSTART1536; GFX900-NEXT:    ; def v[0:1]1537; GFX900-NEXT:    ;;#ASMEND1538; GFX900-NEXT:    v_mov_b32_e32 v2, 01539; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 161540; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1541; GFX900-NEXT:    s_waitcnt vmcnt(0)1542; GFX900-NEXT:    s_setpc_b64 s[30:31]1543;1544; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_2:1545; GFX90A:       ; %bb.0:1546; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1547; GFX90A-NEXT:    ;;#ASMSTART1548; GFX90A-NEXT:    ; def v[0:1]1549; GFX90A-NEXT:    ;;#ASMEND1550; GFX90A-NEXT:    v_mov_b32_e32 v2, 01551; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 161552; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1553; GFX90A-NEXT:    s_waitcnt vmcnt(0)1554; GFX90A-NEXT:    s_setpc_b64 s[30:31]1555;1556; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_2:1557; GFX942:       ; %bb.0:1558; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1559; GFX942-NEXT:    ;;#ASMSTART1560; GFX942-NEXT:    ; def v[0:1]1561; GFX942-NEXT:    ;;#ASMEND1562; GFX942-NEXT:    v_mov_b32_e32 v2, 01563; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 161564; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1565; GFX942-NEXT:    s_waitcnt vmcnt(0)1566; GFX942-NEXT:    s_setpc_b64 s[30:31]1567  %vec0 = call <4 x half> asm "; def $0", "=v"()1568  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 2>1569  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41570  ret void1571}1572 1573define void @v_shuffle_v2f16_v4f16__2_2(ptr addrspace(1) inreg %ptr) {1574; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_2:1575; GFX900:       ; %bb.0:1576; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX900-NEXT:    ;;#ASMSTART1578; GFX900-NEXT:    ; def v[0:1]1579; GFX900-NEXT:    ;;#ASMEND1580; GFX900-NEXT:    s_mov_b32 s4, 0x50401001581; GFX900-NEXT:    v_mov_b32_e32 v2, 01582; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s41583; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1584; GFX900-NEXT:    s_waitcnt vmcnt(0)1585; GFX900-NEXT:    s_setpc_b64 s[30:31]1586;1587; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_2:1588; GFX90A:       ; %bb.0:1589; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1590; GFX90A-NEXT:    ;;#ASMSTART1591; GFX90A-NEXT:    ; def v[0:1]1592; GFX90A-NEXT:    ;;#ASMEND1593; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001594; GFX90A-NEXT:    v_mov_b32_e32 v2, 01595; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s41596; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1597; GFX90A-NEXT:    s_waitcnt vmcnt(0)1598; GFX90A-NEXT:    s_setpc_b64 s[30:31]1599;1600; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_2:1601; GFX942:       ; %bb.0:1602; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1603; GFX942-NEXT:    ;;#ASMSTART1604; GFX942-NEXT:    ; def v[0:1]1605; GFX942-NEXT:    ;;#ASMEND1606; GFX942-NEXT:    s_mov_b32 s2, 0x50401001607; GFX942-NEXT:    v_mov_b32_e32 v2, 01608; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s21609; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1610; GFX942-NEXT:    s_waitcnt vmcnt(0)1611; GFX942-NEXT:    s_setpc_b64 s[30:31]1612  %vec0 = call <4 x half> asm "; def $0", "=v"()1613  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 2>1614  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41615  ret void1616}1617 1618define void @v_shuffle_v2f16_v4f16__3_2(ptr addrspace(1) inreg %ptr) {1619; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_2:1620; GFX900:       ; %bb.0:1621; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-NEXT:    ;;#ASMSTART1623; GFX900-NEXT:    ; def v[0:1]1624; GFX900-NEXT:    ;;#ASMEND1625; GFX900-NEXT:    v_mov_b32_e32 v2, 01626; GFX900-NEXT:    v_alignbit_b32 v0, v1, v1, 161627; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1628; GFX900-NEXT:    s_waitcnt vmcnt(0)1629; GFX900-NEXT:    s_setpc_b64 s[30:31]1630;1631; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_2:1632; GFX90A:       ; %bb.0:1633; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX90A-NEXT:    ;;#ASMSTART1635; GFX90A-NEXT:    ; def v[0:1]1636; GFX90A-NEXT:    ;;#ASMEND1637; GFX90A-NEXT:    v_mov_b32_e32 v2, 01638; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v1, 161639; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1640; GFX90A-NEXT:    s_waitcnt vmcnt(0)1641; GFX90A-NEXT:    s_setpc_b64 s[30:31]1642;1643; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_2:1644; GFX942:       ; %bb.0:1645; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1646; GFX942-NEXT:    ;;#ASMSTART1647; GFX942-NEXT:    ; def v[0:1]1648; GFX942-NEXT:    ;;#ASMEND1649; GFX942-NEXT:    v_mov_b32_e32 v2, 01650; GFX942-NEXT:    v_alignbit_b32 v0, v1, v1, 161651; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1652; GFX942-NEXT:    s_waitcnt vmcnt(0)1653; GFX942-NEXT:    s_setpc_b64 s[30:31]1654  %vec0 = call <4 x half> asm "; def $0", "=v"()1655  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 2>1656  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41657  ret void1658}1659 1660define void @v_shuffle_v2f16_v4f16__4_2(ptr addrspace(1) inreg %ptr) {1661; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_2:1662; GFX900:       ; %bb.0:1663; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX900-NEXT:    ;;#ASMSTART1665; GFX900-NEXT:    ; def v[0:1]1666; GFX900-NEXT:    ;;#ASMEND1667; GFX900-NEXT:    v_mov_b32_e32 v2, 01668; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v11669; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1670; GFX900-NEXT:    s_waitcnt vmcnt(0)1671; GFX900-NEXT:    s_setpc_b64 s[30:31]1672;1673; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_2:1674; GFX90A:       ; %bb.0:1675; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1676; GFX90A-NEXT:    ;;#ASMSTART1677; GFX90A-NEXT:    ; def v[0:1]1678; GFX90A-NEXT:    ;;#ASMEND1679; GFX90A-NEXT:    v_mov_b32_e32 v2, 01680; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v11681; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1682; GFX90A-NEXT:    s_waitcnt vmcnt(0)1683; GFX90A-NEXT:    s_setpc_b64 s[30:31]1684;1685; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_2:1686; GFX942:       ; %bb.0:1687; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1688; GFX942-NEXT:    ;;#ASMSTART1689; GFX942-NEXT:    ; def v[0:1]1690; GFX942-NEXT:    ;;#ASMEND1691; GFX942-NEXT:    v_mov_b32_e32 v2, 01692; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v11693; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1694; GFX942-NEXT:    s_waitcnt vmcnt(0)1695; GFX942-NEXT:    s_setpc_b64 s[30:31]1696  %vec0 = call <4 x half> asm "; def $0", "=v"()1697  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 2>1698  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41699  ret void1700}1701 1702define void @v_shuffle_v2f16_v4f16__5_2(ptr addrspace(1) inreg %ptr) {1703; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_2:1704; GFX900:       ; %bb.0:1705; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1706; GFX900-NEXT:    ;;#ASMSTART1707; GFX900-NEXT:    ; def v[0:1]1708; GFX900-NEXT:    ;;#ASMEND1709; GFX900-NEXT:    v_mov_b32_e32 v4, 01710; GFX900-NEXT:    ;;#ASMSTART1711; GFX900-NEXT:    ; def v[2:3]1712; GFX900-NEXT:    ;;#ASMEND1713; GFX900-NEXT:    v_alignbit_b32 v0, v1, v2, 161714; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]1715; GFX900-NEXT:    s_waitcnt vmcnt(0)1716; GFX900-NEXT:    s_setpc_b64 s[30:31]1717;1718; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_2:1719; GFX90A:       ; %bb.0:1720; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1721; GFX90A-NEXT:    ;;#ASMSTART1722; GFX90A-NEXT:    ; def v[0:1]1723; GFX90A-NEXT:    ;;#ASMEND1724; GFX90A-NEXT:    v_mov_b32_e32 v4, 01725; GFX90A-NEXT:    ;;#ASMSTART1726; GFX90A-NEXT:    ; def v[2:3]1727; GFX90A-NEXT:    ;;#ASMEND1728; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v2, 161729; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1730; GFX90A-NEXT:    s_waitcnt vmcnt(0)1731; GFX90A-NEXT:    s_setpc_b64 s[30:31]1732;1733; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_2:1734; GFX942:       ; %bb.0:1735; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1736; GFX942-NEXT:    ;;#ASMSTART1737; GFX942-NEXT:    ; def v[0:1]1738; GFX942-NEXT:    ;;#ASMEND1739; GFX942-NEXT:    v_mov_b32_e32 v4, 01740; GFX942-NEXT:    ;;#ASMSTART1741; GFX942-NEXT:    ; def v[2:3]1742; GFX942-NEXT:    ;;#ASMEND1743; GFX942-NEXT:    s_nop 01744; GFX942-NEXT:    v_alignbit_b32 v0, v1, v2, 161745; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1746; GFX942-NEXT:    s_waitcnt vmcnt(0)1747; GFX942-NEXT:    s_setpc_b64 s[30:31]1748  %vec0 = call <4 x half> asm "; def $0", "=v"()1749  %vec1 = call <4 x half> asm "; def $0", "=v"()1750  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 2>1751  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41752  ret void1753}1754 1755define void @v_shuffle_v2f16_v4f16__6_2(ptr addrspace(1) inreg %ptr) {1756; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_2:1757; GFX900:       ; %bb.0:1758; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1759; GFX900-NEXT:    ;;#ASMSTART1760; GFX900-NEXT:    ; def v[0:1]1761; GFX900-NEXT:    ;;#ASMEND1762; GFX900-NEXT:    s_mov_b32 s4, 0x50401001763; GFX900-NEXT:    v_mov_b32_e32 v4, 01764; GFX900-NEXT:    ;;#ASMSTART1765; GFX900-NEXT:    ; def v[2:3]1766; GFX900-NEXT:    ;;#ASMEND1767; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s41768; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]1769; GFX900-NEXT:    s_waitcnt vmcnt(0)1770; GFX900-NEXT:    s_setpc_b64 s[30:31]1771;1772; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_2:1773; GFX90A:       ; %bb.0:1774; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1775; GFX90A-NEXT:    ;;#ASMSTART1776; GFX90A-NEXT:    ; def v[0:1]1777; GFX90A-NEXT:    ;;#ASMEND1778; GFX90A-NEXT:    s_mov_b32 s4, 0x50401001779; GFX90A-NEXT:    v_mov_b32_e32 v4, 01780; GFX90A-NEXT:    ;;#ASMSTART1781; GFX90A-NEXT:    ; def v[2:3]1782; GFX90A-NEXT:    ;;#ASMEND1783; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s41784; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]1785; GFX90A-NEXT:    s_waitcnt vmcnt(0)1786; GFX90A-NEXT:    s_setpc_b64 s[30:31]1787;1788; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_2:1789; GFX942:       ; %bb.0:1790; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1791; GFX942-NEXT:    ;;#ASMSTART1792; GFX942-NEXT:    ; def v[0:1]1793; GFX942-NEXT:    ;;#ASMEND1794; GFX942-NEXT:    s_mov_b32 s2, 0x50401001795; GFX942-NEXT:    v_mov_b32_e32 v4, 01796; GFX942-NEXT:    ;;#ASMSTART1797; GFX942-NEXT:    ; def v[2:3]1798; GFX942-NEXT:    ;;#ASMEND1799; GFX942-NEXT:    s_nop 01800; GFX942-NEXT:    v_perm_b32 v0, v1, v3, s21801; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]1802; GFX942-NEXT:    s_waitcnt vmcnt(0)1803; GFX942-NEXT:    s_setpc_b64 s[30:31]1804  %vec0 = call <4 x half> asm "; def $0", "=v"()1805  %vec1 = call <4 x half> asm "; def $0", "=v"()1806  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 2>1807  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41808  ret void1809}1810 1811define void @v_shuffle_v2f16_v4f16__u_3(ptr addrspace(1) inreg %ptr) {1812; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_3:1813; GFX900:       ; %bb.0:1814; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX900-NEXT:    v_mov_b32_e32 v2, 01816; GFX900-NEXT:    ;;#ASMSTART1817; GFX900-NEXT:    ; def v[0:1]1818; GFX900-NEXT:    ;;#ASMEND1819; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1820; GFX900-NEXT:    s_waitcnt vmcnt(0)1821; GFX900-NEXT:    s_setpc_b64 s[30:31]1822;1823; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_3:1824; GFX90A:       ; %bb.0:1825; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1826; GFX90A-NEXT:    v_mov_b32_e32 v2, 01827; GFX90A-NEXT:    ;;#ASMSTART1828; GFX90A-NEXT:    ; def v[0:1]1829; GFX90A-NEXT:    ;;#ASMEND1830; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1831; GFX90A-NEXT:    s_waitcnt vmcnt(0)1832; GFX90A-NEXT:    s_setpc_b64 s[30:31]1833;1834; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_3:1835; GFX942:       ; %bb.0:1836; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1837; GFX942-NEXT:    v_mov_b32_e32 v2, 01838; GFX942-NEXT:    ;;#ASMSTART1839; GFX942-NEXT:    ; def v[0:1]1840; GFX942-NEXT:    ;;#ASMEND1841; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1842; GFX942-NEXT:    s_waitcnt vmcnt(0)1843; GFX942-NEXT:    s_setpc_b64 s[30:31]1844  %vec0 = call <4 x half> asm "; def $0", "=v"()1845  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 3>1846  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41847  ret void1848}1849 1850define void @v_shuffle_v2f16_v4f16__0_3(ptr addrspace(1) inreg %ptr) {1851; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_3:1852; GFX900:       ; %bb.0:1853; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1854; GFX900-NEXT:    ;;#ASMSTART1855; GFX900-NEXT:    ; def v[0:1]1856; GFX900-NEXT:    ;;#ASMEND1857; GFX900-NEXT:    s_mov_b32 s4, 0xffff1858; GFX900-NEXT:    v_mov_b32_e32 v2, 01859; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v11860; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1861; GFX900-NEXT:    s_waitcnt vmcnt(0)1862; GFX900-NEXT:    s_setpc_b64 s[30:31]1863;1864; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_3:1865; GFX90A:       ; %bb.0:1866; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1867; GFX90A-NEXT:    ;;#ASMSTART1868; GFX90A-NEXT:    ; def v[0:1]1869; GFX90A-NEXT:    ;;#ASMEND1870; GFX90A-NEXT:    s_mov_b32 s4, 0xffff1871; GFX90A-NEXT:    v_mov_b32_e32 v2, 01872; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v11873; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1874; GFX90A-NEXT:    s_waitcnt vmcnt(0)1875; GFX90A-NEXT:    s_setpc_b64 s[30:31]1876;1877; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_3:1878; GFX942:       ; %bb.0:1879; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; GFX942-NEXT:    ;;#ASMSTART1881; GFX942-NEXT:    ; def v[0:1]1882; GFX942-NEXT:    ;;#ASMEND1883; GFX942-NEXT:    s_mov_b32 s2, 0xffff1884; GFX942-NEXT:    v_mov_b32_e32 v2, 01885; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v11886; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1887; GFX942-NEXT:    s_waitcnt vmcnt(0)1888; GFX942-NEXT:    s_setpc_b64 s[30:31]1889  %vec0 = call <4 x half> asm "; def $0", "=v"()1890  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 3>1891  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41892  ret void1893}1894 1895define void @v_shuffle_v2f16_v4f16__1_3(ptr addrspace(1) inreg %ptr) {1896; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_3:1897; GFX900:       ; %bb.0:1898; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1899; GFX900-NEXT:    ;;#ASMSTART1900; GFX900-NEXT:    ; def v[0:1]1901; GFX900-NEXT:    ;;#ASMEND1902; GFX900-NEXT:    s_mov_b32 s4, 0x70603021903; GFX900-NEXT:    v_mov_b32_e32 v2, 01904; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s41905; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1906; GFX900-NEXT:    s_waitcnt vmcnt(0)1907; GFX900-NEXT:    s_setpc_b64 s[30:31]1908;1909; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_3:1910; GFX90A:       ; %bb.0:1911; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; GFX90A-NEXT:    ;;#ASMSTART1913; GFX90A-NEXT:    ; def v[0:1]1914; GFX90A-NEXT:    ;;#ASMEND1915; GFX90A-NEXT:    s_mov_b32 s4, 0x70603021916; GFX90A-NEXT:    v_mov_b32_e32 v2, 01917; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s41918; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]1919; GFX90A-NEXT:    s_waitcnt vmcnt(0)1920; GFX90A-NEXT:    s_setpc_b64 s[30:31]1921;1922; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_3:1923; GFX942:       ; %bb.0:1924; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1925; GFX942-NEXT:    ;;#ASMSTART1926; GFX942-NEXT:    ; def v[0:1]1927; GFX942-NEXT:    ;;#ASMEND1928; GFX942-NEXT:    s_mov_b32 s2, 0x70603021929; GFX942-NEXT:    v_mov_b32_e32 v2, 01930; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s21931; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]1932; GFX942-NEXT:    s_waitcnt vmcnt(0)1933; GFX942-NEXT:    s_setpc_b64 s[30:31]1934  %vec0 = call <4 x half> asm "; def $0", "=v"()1935  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 3>1936  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41937  ret void1938}1939 1940define void @v_shuffle_v2f16_v4f16__2_3(ptr addrspace(1) inreg %ptr) {1941; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_3:1942; GFX900:       ; %bb.0:1943; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX900-NEXT:    v_mov_b32_e32 v2, 01945; GFX900-NEXT:    ;;#ASMSTART1946; GFX900-NEXT:    ; def v[0:1]1947; GFX900-NEXT:    ;;#ASMEND1948; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]1949; GFX900-NEXT:    s_waitcnt vmcnt(0)1950; GFX900-NEXT:    s_setpc_b64 s[30:31]1951;1952; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_3:1953; GFX90A:       ; %bb.0:1954; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1955; GFX90A-NEXT:    v_mov_b32_e32 v2, 01956; GFX90A-NEXT:    ;;#ASMSTART1957; GFX90A-NEXT:    ; def v[0:1]1958; GFX90A-NEXT:    ;;#ASMEND1959; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]1960; GFX90A-NEXT:    s_waitcnt vmcnt(0)1961; GFX90A-NEXT:    s_setpc_b64 s[30:31]1962;1963; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_3:1964; GFX942:       ; %bb.0:1965; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1966; GFX942-NEXT:    v_mov_b32_e32 v2, 01967; GFX942-NEXT:    ;;#ASMSTART1968; GFX942-NEXT:    ; def v[0:1]1969; GFX942-NEXT:    ;;#ASMEND1970; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]1971; GFX942-NEXT:    s_waitcnt vmcnt(0)1972; GFX942-NEXT:    s_setpc_b64 s[30:31]1973  %vec0 = call <4 x half> asm "; def $0", "=v"()1974  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 3>1975  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 41976  ret void1977}1978 1979define void @v_shuffle_v2f16_v4f16__3_3(ptr addrspace(1) inreg %ptr) {1980; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_3:1981; GFX900:       ; %bb.0:1982; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1983; GFX900-NEXT:    ;;#ASMSTART1984; GFX900-NEXT:    ; def v[0:1]1985; GFX900-NEXT:    ;;#ASMEND1986; GFX900-NEXT:    s_mov_b32 s4, 0x70603021987; GFX900-NEXT:    v_mov_b32_e32 v2, 01988; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s41989; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]1990; GFX900-NEXT:    s_waitcnt vmcnt(0)1991; GFX900-NEXT:    s_setpc_b64 s[30:31]1992;1993; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_3:1994; GFX90A:       ; %bb.0:1995; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1996; GFX90A-NEXT:    ;;#ASMSTART1997; GFX90A-NEXT:    ; def v[0:1]1998; GFX90A-NEXT:    ;;#ASMEND1999; GFX90A-NEXT:    s_mov_b32 s4, 0x70603022000; GFX90A-NEXT:    v_mov_b32_e32 v2, 02001; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s42002; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2003; GFX90A-NEXT:    s_waitcnt vmcnt(0)2004; GFX90A-NEXT:    s_setpc_b64 s[30:31]2005;2006; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_3:2007; GFX942:       ; %bb.0:2008; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2009; GFX942-NEXT:    ;;#ASMSTART2010; GFX942-NEXT:    ; def v[0:1]2011; GFX942-NEXT:    ;;#ASMEND2012; GFX942-NEXT:    s_mov_b32 s2, 0x70603022013; GFX942-NEXT:    v_mov_b32_e32 v2, 02014; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s22015; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2016; GFX942-NEXT:    s_waitcnt vmcnt(0)2017; GFX942-NEXT:    s_setpc_b64 s[30:31]2018  %vec0 = call <4 x half> asm "; def $0", "=v"()2019  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 3>2020  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42021  ret void2022}2023 2024define void @v_shuffle_v2f16_v4f16__4_3(ptr addrspace(1) inreg %ptr) {2025; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_3:2026; GFX900:       ; %bb.0:2027; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2028; GFX900-NEXT:    v_mov_b32_e32 v2, 02029; GFX900-NEXT:    ;;#ASMSTART2030; GFX900-NEXT:    ; def v[0:1]2031; GFX900-NEXT:    ;;#ASMEND2032; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]2033; GFX900-NEXT:    s_waitcnt vmcnt(0)2034; GFX900-NEXT:    s_setpc_b64 s[30:31]2035;2036; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_3:2037; GFX90A:       ; %bb.0:2038; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2039; GFX90A-NEXT:    v_mov_b32_e32 v2, 02040; GFX90A-NEXT:    ;;#ASMSTART2041; GFX90A-NEXT:    ; def v[0:1]2042; GFX90A-NEXT:    ;;#ASMEND2043; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]2044; GFX90A-NEXT:    s_waitcnt vmcnt(0)2045; GFX90A-NEXT:    s_setpc_b64 s[30:31]2046;2047; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_3:2048; GFX942:       ; %bb.0:2049; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2050; GFX942-NEXT:    v_mov_b32_e32 v2, 02051; GFX942-NEXT:    ;;#ASMSTART2052; GFX942-NEXT:    ; def v[0:1]2053; GFX942-NEXT:    ;;#ASMEND2054; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]2055; GFX942-NEXT:    s_waitcnt vmcnt(0)2056; GFX942-NEXT:    s_setpc_b64 s[30:31]2057  %vec0 = call <4 x half> asm "; def $0", "=v"()2058  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 3>2059  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42060  ret void2061}2062 2063define void @v_shuffle_v2f16_v4f16__5_3(ptr addrspace(1) inreg %ptr) {2064; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_3:2065; GFX900:       ; %bb.0:2066; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX900-NEXT:    ;;#ASMSTART2068; GFX900-NEXT:    ; def v[0:1]2069; GFX900-NEXT:    ;;#ASMEND2070; GFX900-NEXT:    s_mov_b32 s4, 0x70603022071; GFX900-NEXT:    v_mov_b32_e32 v4, 02072; GFX900-NEXT:    ;;#ASMSTART2073; GFX900-NEXT:    ; def v[2:3]2074; GFX900-NEXT:    ;;#ASMEND2075; GFX900-NEXT:    v_perm_b32 v0, v1, v2, s42076; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2077; GFX900-NEXT:    s_waitcnt vmcnt(0)2078; GFX900-NEXT:    s_setpc_b64 s[30:31]2079;2080; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_3:2081; GFX90A:       ; %bb.0:2082; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2083; GFX90A-NEXT:    ;;#ASMSTART2084; GFX90A-NEXT:    ; def v[0:1]2085; GFX90A-NEXT:    ;;#ASMEND2086; GFX90A-NEXT:    s_mov_b32 s4, 0x70603022087; GFX90A-NEXT:    v_mov_b32_e32 v4, 02088; GFX90A-NEXT:    ;;#ASMSTART2089; GFX90A-NEXT:    ; def v[2:3]2090; GFX90A-NEXT:    ;;#ASMEND2091; GFX90A-NEXT:    v_perm_b32 v0, v1, v2, s42092; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2093; GFX90A-NEXT:    s_waitcnt vmcnt(0)2094; GFX90A-NEXT:    s_setpc_b64 s[30:31]2095;2096; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_3:2097; GFX942:       ; %bb.0:2098; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX942-NEXT:    ;;#ASMSTART2100; GFX942-NEXT:    ; def v[0:1]2101; GFX942-NEXT:    ;;#ASMEND2102; GFX942-NEXT:    s_mov_b32 s2, 0x70603022103; GFX942-NEXT:    v_mov_b32_e32 v4, 02104; GFX942-NEXT:    ;;#ASMSTART2105; GFX942-NEXT:    ; def v[2:3]2106; GFX942-NEXT:    ;;#ASMEND2107; GFX942-NEXT:    s_nop 02108; GFX942-NEXT:    v_perm_b32 v0, v1, v2, s22109; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2110; GFX942-NEXT:    s_waitcnt vmcnt(0)2111; GFX942-NEXT:    s_setpc_b64 s[30:31]2112  %vec0 = call <4 x half> asm "; def $0", "=v"()2113  %vec1 = call <4 x half> asm "; def $0", "=v"()2114  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 3>2115  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42116  ret void2117}2118 2119define void @v_shuffle_v2f16_v4f16__6_3(ptr addrspace(1) inreg %ptr) {2120; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_3:2121; GFX900:       ; %bb.0:2122; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; GFX900-NEXT:    ;;#ASMSTART2124; GFX900-NEXT:    ; def v[0:1]2125; GFX900-NEXT:    ;;#ASMEND2126; GFX900-NEXT:    s_mov_b32 s4, 0xffff2127; GFX900-NEXT:    v_mov_b32_e32 v4, 02128; GFX900-NEXT:    ;;#ASMSTART2129; GFX900-NEXT:    ; def v[2:3]2130; GFX900-NEXT:    ;;#ASMEND2131; GFX900-NEXT:    v_bfi_b32 v0, s4, v3, v12132; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2133; GFX900-NEXT:    s_waitcnt vmcnt(0)2134; GFX900-NEXT:    s_setpc_b64 s[30:31]2135;2136; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_3:2137; GFX90A:       ; %bb.0:2138; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2139; GFX90A-NEXT:    ;;#ASMSTART2140; GFX90A-NEXT:    ; def v[0:1]2141; GFX90A-NEXT:    ;;#ASMEND2142; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2143; GFX90A-NEXT:    v_mov_b32_e32 v4, 02144; GFX90A-NEXT:    ;;#ASMSTART2145; GFX90A-NEXT:    ; def v[2:3]2146; GFX90A-NEXT:    ;;#ASMEND2147; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v12148; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2149; GFX90A-NEXT:    s_waitcnt vmcnt(0)2150; GFX90A-NEXT:    s_setpc_b64 s[30:31]2151;2152; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_3:2153; GFX942:       ; %bb.0:2154; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2155; GFX942-NEXT:    ;;#ASMSTART2156; GFX942-NEXT:    ; def v[0:1]2157; GFX942-NEXT:    ;;#ASMEND2158; GFX942-NEXT:    s_mov_b32 s2, 0xffff2159; GFX942-NEXT:    v_mov_b32_e32 v4, 02160; GFX942-NEXT:    ;;#ASMSTART2161; GFX942-NEXT:    ; def v[2:3]2162; GFX942-NEXT:    ;;#ASMEND2163; GFX942-NEXT:    s_nop 02164; GFX942-NEXT:    v_bfi_b32 v0, s2, v3, v12165; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2166; GFX942-NEXT:    s_waitcnt vmcnt(0)2167; GFX942-NEXT:    s_setpc_b64 s[30:31]2168  %vec0 = call <4 x half> asm "; def $0", "=v"()2169  %vec1 = call <4 x half> asm "; def $0", "=v"()2170  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 3>2171  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42172  ret void2173}2174 2175define void @v_shuffle_v2f16_v4f16__u_4(ptr addrspace(1) inreg %ptr) {2176; GFX9-LABEL: v_shuffle_v2f16_v4f16__u_4:2177; GFX9:       ; %bb.0:2178; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2179; GFX9-NEXT:    s_setpc_b64 s[30:31]2180  %vec0 = call <4 x half> asm "; def $0", "=v"()2181  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 4>2182  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42183  ret void2184}2185 2186define void @v_shuffle_v2f16_v4f16__0_4(ptr addrspace(1) inreg %ptr) {2187; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_4:2188; GFX900:       ; %bb.0:2189; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX900-NEXT:    v_mov_b32_e32 v2, 02191; GFX900-NEXT:    ;;#ASMSTART2192; GFX900-NEXT:    ; def v[0:1]2193; GFX900-NEXT:    ;;#ASMEND2194; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2195; GFX900-NEXT:    s_waitcnt vmcnt(0)2196; GFX900-NEXT:    s_setpc_b64 s[30:31]2197;2198; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_4:2199; GFX90A:       ; %bb.0:2200; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX90A-NEXT:    v_mov_b32_e32 v2, 02202; GFX90A-NEXT:    ;;#ASMSTART2203; GFX90A-NEXT:    ; def v[0:1]2204; GFX90A-NEXT:    ;;#ASMEND2205; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2206; GFX90A-NEXT:    s_waitcnt vmcnt(0)2207; GFX90A-NEXT:    s_setpc_b64 s[30:31]2208;2209; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_4:2210; GFX942:       ; %bb.0:2211; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX942-NEXT:    v_mov_b32_e32 v2, 02213; GFX942-NEXT:    ;;#ASMSTART2214; GFX942-NEXT:    ; def v[0:1]2215; GFX942-NEXT:    ;;#ASMEND2216; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2217; GFX942-NEXT:    s_waitcnt vmcnt(0)2218; GFX942-NEXT:    s_setpc_b64 s[30:31]2219  %vec0 = call <4 x half> asm "; def $0", "=v"()2220  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 4>2221  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42222  ret void2223}2224 2225define void @v_shuffle_v2f16_v4f16__1_4(ptr addrspace(1) inreg %ptr) {2226; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_4:2227; GFX900:       ; %bb.0:2228; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX900-NEXT:    ;;#ASMSTART2230; GFX900-NEXT:    ; def v[0:1]2231; GFX900-NEXT:    ;;#ASMEND2232; GFX900-NEXT:    v_mov_b32_e32 v2, 02233; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 162234; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2235; GFX900-NEXT:    s_waitcnt vmcnt(0)2236; GFX900-NEXT:    s_setpc_b64 s[30:31]2237;2238; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_4:2239; GFX90A:       ; %bb.0:2240; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2241; GFX90A-NEXT:    ;;#ASMSTART2242; GFX90A-NEXT:    ; def v[0:1]2243; GFX90A-NEXT:    ;;#ASMEND2244; GFX90A-NEXT:    v_mov_b32_e32 v2, 02245; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 162246; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2247; GFX90A-NEXT:    s_waitcnt vmcnt(0)2248; GFX90A-NEXT:    s_setpc_b64 s[30:31]2249;2250; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_4:2251; GFX942:       ; %bb.0:2252; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2253; GFX942-NEXT:    ;;#ASMSTART2254; GFX942-NEXT:    ; def v[0:1]2255; GFX942-NEXT:    ;;#ASMEND2256; GFX942-NEXT:    v_mov_b32_e32 v2, 02257; GFX942-NEXT:    v_alignbit_b32 v0, s0, v0, 162258; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2259; GFX942-NEXT:    s_waitcnt vmcnt(0)2260; GFX942-NEXT:    s_setpc_b64 s[30:31]2261  %vec0 = call <4 x half> asm "; def $0", "=v"()2262  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 4>2263  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42264  ret void2265}2266 2267define void @v_shuffle_v2f16_v4f16__2_4(ptr addrspace(1) inreg %ptr) {2268; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_4:2269; GFX900:       ; %bb.0:2270; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2271; GFX900-NEXT:    v_mov_b32_e32 v2, 02272; GFX900-NEXT:    ;;#ASMSTART2273; GFX900-NEXT:    ; def v[0:1]2274; GFX900-NEXT:    ;;#ASMEND2275; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]2276; GFX900-NEXT:    s_waitcnt vmcnt(0)2277; GFX900-NEXT:    s_setpc_b64 s[30:31]2278;2279; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_4:2280; GFX90A:       ; %bb.0:2281; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2282; GFX90A-NEXT:    v_mov_b32_e32 v2, 02283; GFX90A-NEXT:    ;;#ASMSTART2284; GFX90A-NEXT:    ; def v[0:1]2285; GFX90A-NEXT:    ;;#ASMEND2286; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]2287; GFX90A-NEXT:    s_waitcnt vmcnt(0)2288; GFX90A-NEXT:    s_setpc_b64 s[30:31]2289;2290; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_4:2291; GFX942:       ; %bb.0:2292; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2293; GFX942-NEXT:    v_mov_b32_e32 v2, 02294; GFX942-NEXT:    ;;#ASMSTART2295; GFX942-NEXT:    ; def v[0:1]2296; GFX942-NEXT:    ;;#ASMEND2297; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]2298; GFX942-NEXT:    s_waitcnt vmcnt(0)2299; GFX942-NEXT:    s_setpc_b64 s[30:31]2300  %vec0 = call <4 x half> asm "; def $0", "=v"()2301  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 4>2302  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42303  ret void2304}2305 2306define void @v_shuffle_v2f16_v4f16__3_4(ptr addrspace(1) inreg %ptr) {2307; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_4:2308; GFX900:       ; %bb.0:2309; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX900-NEXT:    ;;#ASMSTART2311; GFX900-NEXT:    ; def v[0:1]2312; GFX900-NEXT:    ;;#ASMEND2313; GFX900-NEXT:    v_mov_b32_e32 v2, 02314; GFX900-NEXT:    v_alignbit_b32 v0, s4, v1, 162315; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2316; GFX900-NEXT:    s_waitcnt vmcnt(0)2317; GFX900-NEXT:    s_setpc_b64 s[30:31]2318;2319; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_4:2320; GFX90A:       ; %bb.0:2321; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2322; GFX90A-NEXT:    ;;#ASMSTART2323; GFX90A-NEXT:    ; def v[0:1]2324; GFX90A-NEXT:    ;;#ASMEND2325; GFX90A-NEXT:    v_mov_b32_e32 v2, 02326; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v1, 162327; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2328; GFX90A-NEXT:    s_waitcnt vmcnt(0)2329; GFX90A-NEXT:    s_setpc_b64 s[30:31]2330;2331; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_4:2332; GFX942:       ; %bb.0:2333; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX942-NEXT:    ;;#ASMSTART2335; GFX942-NEXT:    ; def v[0:1]2336; GFX942-NEXT:    ;;#ASMEND2337; GFX942-NEXT:    v_mov_b32_e32 v2, 02338; GFX942-NEXT:    v_alignbit_b32 v0, s0, v1, 162339; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2340; GFX942-NEXT:    s_waitcnt vmcnt(0)2341; GFX942-NEXT:    s_setpc_b64 s[30:31]2342  %vec0 = call <4 x half> asm "; def $0", "=v"()2343  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 4>2344  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42345  ret void2346}2347 2348define void @v_shuffle_v2f16_v4f16__4_4(ptr addrspace(1) inreg %ptr) {2349; GFX9-LABEL: v_shuffle_v2f16_v4f16__4_4:2350; GFX9:       ; %bb.0:2351; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2352; GFX9-NEXT:    s_setpc_b64 s[30:31]2353  %vec0 = call <4 x half> asm "; def $0", "=v"()2354  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 4>2355  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42356  ret void2357}2358 2359define void @v_shuffle_v2f16_v4f16__5_4(ptr addrspace(1) inreg %ptr) {2360; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_4:2361; GFX900:       ; %bb.0:2362; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2363; GFX900-NEXT:    ;;#ASMSTART2364; GFX900-NEXT:    ; def v[0:1]2365; GFX900-NEXT:    ;;#ASMEND2366; GFX900-NEXT:    v_mov_b32_e32 v2, 02367; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 162368; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2369; GFX900-NEXT:    s_waitcnt vmcnt(0)2370; GFX900-NEXT:    s_setpc_b64 s[30:31]2371;2372; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_4:2373; GFX90A:       ; %bb.0:2374; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2375; GFX90A-NEXT:    ;;#ASMSTART2376; GFX90A-NEXT:    ; def v[0:1]2377; GFX90A-NEXT:    ;;#ASMEND2378; GFX90A-NEXT:    v_mov_b32_e32 v2, 02379; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 162380; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2381; GFX90A-NEXT:    s_waitcnt vmcnt(0)2382; GFX90A-NEXT:    s_setpc_b64 s[30:31]2383;2384; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_4:2385; GFX942:       ; %bb.0:2386; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2387; GFX942-NEXT:    ;;#ASMSTART2388; GFX942-NEXT:    ; def v[0:1]2389; GFX942-NEXT:    ;;#ASMEND2390; GFX942-NEXT:    v_mov_b32_e32 v2, 02391; GFX942-NEXT:    v_alignbit_b32 v0, v0, v0, 162392; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2393; GFX942-NEXT:    s_waitcnt vmcnt(0)2394; GFX942-NEXT:    s_setpc_b64 s[30:31]2395  %vec0 = call <4 x half> asm "; def $0", "=v"()2396  %vec1 = call <4 x half> asm "; def $0", "=v"()2397  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 4>2398  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42399  ret void2400}2401 2402define void @v_shuffle_v2f16_v4f16__6_4(ptr addrspace(1) inreg %ptr) {2403; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_4:2404; GFX900:       ; %bb.0:2405; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX900-NEXT:    ;;#ASMSTART2407; GFX900-NEXT:    ; def v[0:1]2408; GFX900-NEXT:    ;;#ASMEND2409; GFX900-NEXT:    s_mov_b32 s4, 0x50401002410; GFX900-NEXT:    v_mov_b32_e32 v2, 02411; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s42412; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2413; GFX900-NEXT:    s_waitcnt vmcnt(0)2414; GFX900-NEXT:    s_setpc_b64 s[30:31]2415;2416; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_4:2417; GFX90A:       ; %bb.0:2418; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2419; GFX90A-NEXT:    ;;#ASMSTART2420; GFX90A-NEXT:    ; def v[0:1]2421; GFX90A-NEXT:    ;;#ASMEND2422; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002423; GFX90A-NEXT:    v_mov_b32_e32 v2, 02424; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s42425; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2426; GFX90A-NEXT:    s_waitcnt vmcnt(0)2427; GFX90A-NEXT:    s_setpc_b64 s[30:31]2428;2429; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_4:2430; GFX942:       ; %bb.0:2431; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2432; GFX942-NEXT:    ;;#ASMSTART2433; GFX942-NEXT:    ; def v[0:1]2434; GFX942-NEXT:    ;;#ASMEND2435; GFX942-NEXT:    s_mov_b32 s2, 0x50401002436; GFX942-NEXT:    v_mov_b32_e32 v2, 02437; GFX942-NEXT:    v_perm_b32 v0, v0, v1, s22438; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2439; GFX942-NEXT:    s_waitcnt vmcnt(0)2440; GFX942-NEXT:    s_setpc_b64 s[30:31]2441  %vec0 = call <4 x half> asm "; def $0", "=v"()2442  %vec1 = call <4 x half> asm "; def $0", "=v"()2443  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 4>2444  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42445  ret void2446}2447 2448define void @v_shuffle_v2f16_v4f16__u_5(ptr addrspace(1) inreg %ptr) {2449; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_5:2450; GFX900:       ; %bb.0:2451; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX900-NEXT:    v_mov_b32_e32 v2, 02453; GFX900-NEXT:    ;;#ASMSTART2454; GFX900-NEXT:    ; def v[0:1]2455; GFX900-NEXT:    ;;#ASMEND2456; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2457; GFX900-NEXT:    s_waitcnt vmcnt(0)2458; GFX900-NEXT:    s_setpc_b64 s[30:31]2459;2460; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_5:2461; GFX90A:       ; %bb.0:2462; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; GFX90A-NEXT:    v_mov_b32_e32 v2, 02464; GFX90A-NEXT:    ;;#ASMSTART2465; GFX90A-NEXT:    ; def v[0:1]2466; GFX90A-NEXT:    ;;#ASMEND2467; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2468; GFX90A-NEXT:    s_waitcnt vmcnt(0)2469; GFX90A-NEXT:    s_setpc_b64 s[30:31]2470;2471; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_5:2472; GFX942:       ; %bb.0:2473; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2474; GFX942-NEXT:    v_mov_b32_e32 v2, 02475; GFX942-NEXT:    ;;#ASMSTART2476; GFX942-NEXT:    ; def v[0:1]2477; GFX942-NEXT:    ;;#ASMEND2478; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2479; GFX942-NEXT:    s_waitcnt vmcnt(0)2480; GFX942-NEXT:    s_setpc_b64 s[30:31]2481  %vec0 = call <4 x half> asm "; def $0", "=v"()2482  %vec1 = call <4 x half> asm "; def $0", "=v"()2483  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 5>2484  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42485  ret void2486}2487 2488define void @v_shuffle_v2f16_v4f16__0_5(ptr addrspace(1) inreg %ptr) {2489; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_5:2490; GFX900:       ; %bb.0:2491; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX900-NEXT:    ;;#ASMSTART2493; GFX900-NEXT:    ; def v[0:1]2494; GFX900-NEXT:    ;;#ASMEND2495; GFX900-NEXT:    s_mov_b32 s4, 0xffff2496; GFX900-NEXT:    v_mov_b32_e32 v3, 02497; GFX900-NEXT:    ;;#ASMSTART2498; GFX900-NEXT:    ; def v[1:2]2499; GFX900-NEXT:    ;;#ASMEND2500; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v12501; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]2502; GFX900-NEXT:    s_waitcnt vmcnt(0)2503; GFX900-NEXT:    s_setpc_b64 s[30:31]2504;2505; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_5:2506; GFX90A:       ; %bb.0:2507; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2508; GFX90A-NEXT:    ;;#ASMSTART2509; GFX90A-NEXT:    ; def v[0:1]2510; GFX90A-NEXT:    ;;#ASMEND2511; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2512; GFX90A-NEXT:    v_mov_b32_e32 v4, 02513; GFX90A-NEXT:    ;;#ASMSTART2514; GFX90A-NEXT:    ; def v[2:3]2515; GFX90A-NEXT:    ;;#ASMEND2516; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v22517; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2518; GFX90A-NEXT:    s_waitcnt vmcnt(0)2519; GFX90A-NEXT:    s_setpc_b64 s[30:31]2520;2521; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_5:2522; GFX942:       ; %bb.0:2523; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2524; GFX942-NEXT:    ;;#ASMSTART2525; GFX942-NEXT:    ; def v[0:1]2526; GFX942-NEXT:    ;;#ASMEND2527; GFX942-NEXT:    s_mov_b32 s2, 0xffff2528; GFX942-NEXT:    v_mov_b32_e32 v4, 02529; GFX942-NEXT:    ;;#ASMSTART2530; GFX942-NEXT:    ; def v[2:3]2531; GFX942-NEXT:    ;;#ASMEND2532; GFX942-NEXT:    s_nop 02533; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v22534; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2535; GFX942-NEXT:    s_waitcnt vmcnt(0)2536; GFX942-NEXT:    s_setpc_b64 s[30:31]2537  %vec0 = call <4 x half> asm "; def $0", "=v"()2538  %vec1 = call <4 x half> asm "; def $0", "=v"()2539  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 5>2540  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42541  ret void2542}2543 2544define void @v_shuffle_v2f16_v4f16__1_5(ptr addrspace(1) inreg %ptr) {2545; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_5:2546; GFX900:       ; %bb.0:2547; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2548; GFX900-NEXT:    ;;#ASMSTART2549; GFX900-NEXT:    ; def v[0:1]2550; GFX900-NEXT:    ;;#ASMEND2551; GFX900-NEXT:    s_mov_b32 s4, 0x70603022552; GFX900-NEXT:    v_mov_b32_e32 v3, 02553; GFX900-NEXT:    ;;#ASMSTART2554; GFX900-NEXT:    ; def v[1:2]2555; GFX900-NEXT:    ;;#ASMEND2556; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s42557; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]2558; GFX900-NEXT:    s_waitcnt vmcnt(0)2559; GFX900-NEXT:    s_setpc_b64 s[30:31]2560;2561; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_5:2562; GFX90A:       ; %bb.0:2563; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2564; GFX90A-NEXT:    ;;#ASMSTART2565; GFX90A-NEXT:    ; def v[0:1]2566; GFX90A-NEXT:    ;;#ASMEND2567; GFX90A-NEXT:    s_mov_b32 s4, 0x70603022568; GFX90A-NEXT:    v_mov_b32_e32 v4, 02569; GFX90A-NEXT:    ;;#ASMSTART2570; GFX90A-NEXT:    ; def v[2:3]2571; GFX90A-NEXT:    ;;#ASMEND2572; GFX90A-NEXT:    v_perm_b32 v0, v2, v0, s42573; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2574; GFX90A-NEXT:    s_waitcnt vmcnt(0)2575; GFX90A-NEXT:    s_setpc_b64 s[30:31]2576;2577; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_5:2578; GFX942:       ; %bb.0:2579; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX942-NEXT:    ;;#ASMSTART2581; GFX942-NEXT:    ; def v[0:1]2582; GFX942-NEXT:    ;;#ASMEND2583; GFX942-NEXT:    s_mov_b32 s2, 0x70603022584; GFX942-NEXT:    v_mov_b32_e32 v4, 02585; GFX942-NEXT:    ;;#ASMSTART2586; GFX942-NEXT:    ; def v[2:3]2587; GFX942-NEXT:    ;;#ASMEND2588; GFX942-NEXT:    s_nop 02589; GFX942-NEXT:    v_perm_b32 v0, v2, v0, s22590; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2591; GFX942-NEXT:    s_waitcnt vmcnt(0)2592; GFX942-NEXT:    s_setpc_b64 s[30:31]2593  %vec0 = call <4 x half> asm "; def $0", "=v"()2594  %vec1 = call <4 x half> asm "; def $0", "=v"()2595  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 5>2596  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42597  ret void2598}2599 2600define void @v_shuffle_v2f16_v4f16__2_5(ptr addrspace(1) inreg %ptr) {2601; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_5:2602; GFX900:       ; %bb.0:2603; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2604; GFX900-NEXT:    ;;#ASMSTART2605; GFX900-NEXT:    ; def v[0:1]2606; GFX900-NEXT:    ;;#ASMEND2607; GFX900-NEXT:    s_mov_b32 s4, 0xffff2608; GFX900-NEXT:    v_mov_b32_e32 v4, 02609; GFX900-NEXT:    ;;#ASMSTART2610; GFX900-NEXT:    ; def v[2:3]2611; GFX900-NEXT:    ;;#ASMEND2612; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v22613; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2614; GFX900-NEXT:    s_waitcnt vmcnt(0)2615; GFX900-NEXT:    s_setpc_b64 s[30:31]2616;2617; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_5:2618; GFX90A:       ; %bb.0:2619; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2620; GFX90A-NEXT:    ;;#ASMSTART2621; GFX90A-NEXT:    ; def v[0:1]2622; GFX90A-NEXT:    ;;#ASMEND2623; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2624; GFX90A-NEXT:    v_mov_b32_e32 v4, 02625; GFX90A-NEXT:    ;;#ASMSTART2626; GFX90A-NEXT:    ; def v[2:3]2627; GFX90A-NEXT:    ;;#ASMEND2628; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v22629; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2630; GFX90A-NEXT:    s_waitcnt vmcnt(0)2631; GFX90A-NEXT:    s_setpc_b64 s[30:31]2632;2633; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_5:2634; GFX942:       ; %bb.0:2635; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX942-NEXT:    ;;#ASMSTART2637; GFX942-NEXT:    ; def v[0:1]2638; GFX942-NEXT:    ;;#ASMEND2639; GFX942-NEXT:    s_mov_b32 s2, 0xffff2640; GFX942-NEXT:    v_mov_b32_e32 v4, 02641; GFX942-NEXT:    ;;#ASMSTART2642; GFX942-NEXT:    ; def v[2:3]2643; GFX942-NEXT:    ;;#ASMEND2644; GFX942-NEXT:    s_nop 02645; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v22646; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2647; GFX942-NEXT:    s_waitcnt vmcnt(0)2648; GFX942-NEXT:    s_setpc_b64 s[30:31]2649  %vec0 = call <4 x half> asm "; def $0", "=v"()2650  %vec1 = call <4 x half> asm "; def $0", "=v"()2651  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 5>2652  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42653  ret void2654}2655 2656define void @v_shuffle_v2f16_v4f16__3_5(ptr addrspace(1) inreg %ptr) {2657; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_5:2658; GFX900:       ; %bb.0:2659; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2660; GFX900-NEXT:    ;;#ASMSTART2661; GFX900-NEXT:    ; def v[0:1]2662; GFX900-NEXT:    ;;#ASMEND2663; GFX900-NEXT:    s_mov_b32 s4, 0x70603022664; GFX900-NEXT:    v_mov_b32_e32 v4, 02665; GFX900-NEXT:    ;;#ASMSTART2666; GFX900-NEXT:    ; def v[2:3]2667; GFX900-NEXT:    ;;#ASMEND2668; GFX900-NEXT:    v_perm_b32 v0, v2, v1, s42669; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]2670; GFX900-NEXT:    s_waitcnt vmcnt(0)2671; GFX900-NEXT:    s_setpc_b64 s[30:31]2672;2673; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_5:2674; GFX90A:       ; %bb.0:2675; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2676; GFX90A-NEXT:    ;;#ASMSTART2677; GFX90A-NEXT:    ; def v[0:1]2678; GFX90A-NEXT:    ;;#ASMEND2679; GFX90A-NEXT:    s_mov_b32 s4, 0x70603022680; GFX90A-NEXT:    v_mov_b32_e32 v4, 02681; GFX90A-NEXT:    ;;#ASMSTART2682; GFX90A-NEXT:    ; def v[2:3]2683; GFX90A-NEXT:    ;;#ASMEND2684; GFX90A-NEXT:    v_perm_b32 v0, v2, v1, s42685; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2686; GFX90A-NEXT:    s_waitcnt vmcnt(0)2687; GFX90A-NEXT:    s_setpc_b64 s[30:31]2688;2689; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_5:2690; GFX942:       ; %bb.0:2691; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2692; GFX942-NEXT:    ;;#ASMSTART2693; GFX942-NEXT:    ; def v[0:1]2694; GFX942-NEXT:    ;;#ASMEND2695; GFX942-NEXT:    s_mov_b32 s2, 0x70603022696; GFX942-NEXT:    v_mov_b32_e32 v4, 02697; GFX942-NEXT:    ;;#ASMSTART2698; GFX942-NEXT:    ; def v[2:3]2699; GFX942-NEXT:    ;;#ASMEND2700; GFX942-NEXT:    s_nop 02701; GFX942-NEXT:    v_perm_b32 v0, v2, v1, s22702; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2703; GFX942-NEXT:    s_waitcnt vmcnt(0)2704; GFX942-NEXT:    s_setpc_b64 s[30:31]2705  %vec0 = call <4 x half> asm "; def $0", "=v"()2706  %vec1 = call <4 x half> asm "; def $0", "=v"()2707  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 5>2708  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42709  ret void2710}2711 2712define void @v_shuffle_v2f16_v4f16__4_5(ptr addrspace(1) inreg %ptr) {2713; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_5:2714; GFX900:       ; %bb.0:2715; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2716; GFX900-NEXT:    v_mov_b32_e32 v2, 02717; GFX900-NEXT:    ;;#ASMSTART2718; GFX900-NEXT:    ; def v[0:1]2719; GFX900-NEXT:    ;;#ASMEND2720; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2721; GFX900-NEXT:    s_waitcnt vmcnt(0)2722; GFX900-NEXT:    s_setpc_b64 s[30:31]2723;2724; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_5:2725; GFX90A:       ; %bb.0:2726; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX90A-NEXT:    v_mov_b32_e32 v2, 02728; GFX90A-NEXT:    ;;#ASMSTART2729; GFX90A-NEXT:    ; def v[0:1]2730; GFX90A-NEXT:    ;;#ASMEND2731; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2732; GFX90A-NEXT:    s_waitcnt vmcnt(0)2733; GFX90A-NEXT:    s_setpc_b64 s[30:31]2734;2735; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_5:2736; GFX942:       ; %bb.0:2737; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2738; GFX942-NEXT:    v_mov_b32_e32 v2, 02739; GFX942-NEXT:    ;;#ASMSTART2740; GFX942-NEXT:    ; def v[0:1]2741; GFX942-NEXT:    ;;#ASMEND2742; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2743; GFX942-NEXT:    s_waitcnt vmcnt(0)2744; GFX942-NEXT:    s_setpc_b64 s[30:31]2745  %vec0 = call <4 x half> asm "; def $0", "=v"()2746  %vec1 = call <4 x half> asm "; def $0", "=v"()2747  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 5>2748  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42749  ret void2750}2751 2752define void @v_shuffle_v2f16_v4f16__5_5(ptr addrspace(1) inreg %ptr) {2753; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_5:2754; GFX900:       ; %bb.0:2755; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2756; GFX900-NEXT:    ;;#ASMSTART2757; GFX900-NEXT:    ; def v[0:1]2758; GFX900-NEXT:    ;;#ASMEND2759; GFX900-NEXT:    s_mov_b32 s4, 0x70603022760; GFX900-NEXT:    v_mov_b32_e32 v2, 02761; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s42762; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2763; GFX900-NEXT:    s_waitcnt vmcnt(0)2764; GFX900-NEXT:    s_setpc_b64 s[30:31]2765;2766; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_5:2767; GFX90A:       ; %bb.0:2768; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX90A-NEXT:    ;;#ASMSTART2770; GFX90A-NEXT:    ; def v[0:1]2771; GFX90A-NEXT:    ;;#ASMEND2772; GFX90A-NEXT:    s_mov_b32 s4, 0x70603022773; GFX90A-NEXT:    v_mov_b32_e32 v2, 02774; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s42775; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2776; GFX90A-NEXT:    s_waitcnt vmcnt(0)2777; GFX90A-NEXT:    s_setpc_b64 s[30:31]2778;2779; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_5:2780; GFX942:       ; %bb.0:2781; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2782; GFX942-NEXT:    ;;#ASMSTART2783; GFX942-NEXT:    ; def v[0:1]2784; GFX942-NEXT:    ;;#ASMEND2785; GFX942-NEXT:    s_mov_b32 s2, 0x70603022786; GFX942-NEXT:    v_mov_b32_e32 v2, 02787; GFX942-NEXT:    v_perm_b32 v0, v0, v0, s22788; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2789; GFX942-NEXT:    s_waitcnt vmcnt(0)2790; GFX942-NEXT:    s_setpc_b64 s[30:31]2791  %vec0 = call <4 x half> asm "; def $0", "=v"()2792  %vec1 = call <4 x half> asm "; def $0", "=v"()2793  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 5>2794  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42795  ret void2796}2797 2798define void @v_shuffle_v2f16_v4f16__6_5(ptr addrspace(1) inreg %ptr) {2799; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_5:2800; GFX900:       ; %bb.0:2801; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2802; GFX900-NEXT:    ;;#ASMSTART2803; GFX900-NEXT:    ; def v[0:1]2804; GFX900-NEXT:    ;;#ASMEND2805; GFX900-NEXT:    s_mov_b32 s4, 0xffff2806; GFX900-NEXT:    v_mov_b32_e32 v2, 02807; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v02808; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2809; GFX900-NEXT:    s_waitcnt vmcnt(0)2810; GFX900-NEXT:    s_setpc_b64 s[30:31]2811;2812; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_5:2813; GFX90A:       ; %bb.0:2814; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2815; GFX90A-NEXT:    ;;#ASMSTART2816; GFX90A-NEXT:    ; def v[0:1]2817; GFX90A-NEXT:    ;;#ASMEND2818; GFX90A-NEXT:    s_mov_b32 s4, 0xffff2819; GFX90A-NEXT:    v_mov_b32_e32 v2, 02820; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v02821; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2822; GFX90A-NEXT:    s_waitcnt vmcnt(0)2823; GFX90A-NEXT:    s_setpc_b64 s[30:31]2824;2825; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_5:2826; GFX942:       ; %bb.0:2827; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2828; GFX942-NEXT:    ;;#ASMSTART2829; GFX942-NEXT:    ; def v[0:1]2830; GFX942-NEXT:    ;;#ASMEND2831; GFX942-NEXT:    s_mov_b32 s2, 0xffff2832; GFX942-NEXT:    v_mov_b32_e32 v2, 02833; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v02834; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2835; GFX942-NEXT:    s_waitcnt vmcnt(0)2836; GFX942-NEXT:    s_setpc_b64 s[30:31]2837  %vec0 = call <4 x half> asm "; def $0", "=v"()2838  %vec1 = call <4 x half> asm "; def $0", "=v"()2839  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 5>2840  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42841  ret void2842}2843 2844define void @v_shuffle_v2f16_v4f16__u_6(ptr addrspace(1) inreg %ptr) {2845; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_6:2846; GFX900:       ; %bb.0:2847; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2848; GFX900-NEXT:    ;;#ASMSTART2849; GFX900-NEXT:    ; def v[0:1]2850; GFX900-NEXT:    ;;#ASMEND2851; GFX900-NEXT:    v_mov_b32_e32 v2, 02852; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v12853; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]2854; GFX900-NEXT:    s_waitcnt vmcnt(0)2855; GFX900-NEXT:    s_setpc_b64 s[30:31]2856;2857; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_6:2858; GFX90A:       ; %bb.0:2859; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2860; GFX90A-NEXT:    ;;#ASMSTART2861; GFX90A-NEXT:    ; def v[0:1]2862; GFX90A-NEXT:    ;;#ASMEND2863; GFX90A-NEXT:    v_mov_b32_e32 v2, 02864; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v12865; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]2866; GFX90A-NEXT:    s_waitcnt vmcnt(0)2867; GFX90A-NEXT:    s_setpc_b64 s[30:31]2868;2869; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_6:2870; GFX942:       ; %bb.0:2871; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2872; GFX942-NEXT:    ;;#ASMSTART2873; GFX942-NEXT:    ; def v[0:1]2874; GFX942-NEXT:    ;;#ASMEND2875; GFX942-NEXT:    v_mov_b32_e32 v2, 02876; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 16, v12877; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]2878; GFX942-NEXT:    s_waitcnt vmcnt(0)2879; GFX942-NEXT:    s_setpc_b64 s[30:31]2880  %vec0 = call <4 x half> asm "; def $0", "=v"()2881  %vec1 = call <4 x half> asm "; def $0", "=v"()2882  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 6>2883  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42884  ret void2885}2886 2887define void @v_shuffle_v2f16_v4f16__0_6(ptr addrspace(1) inreg %ptr) {2888; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_6:2889; GFX900:       ; %bb.0:2890; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GFX900-NEXT:    ;;#ASMSTART2892; GFX900-NEXT:    ; def v[0:1]2893; GFX900-NEXT:    ;;#ASMEND2894; GFX900-NEXT:    s_mov_b32 s4, 0x50401002895; GFX900-NEXT:    v_mov_b32_e32 v3, 02896; GFX900-NEXT:    ;;#ASMSTART2897; GFX900-NEXT:    ; def v[1:2]2898; GFX900-NEXT:    ;;#ASMEND2899; GFX900-NEXT:    v_perm_b32 v0, v2, v0, s42900; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]2901; GFX900-NEXT:    s_waitcnt vmcnt(0)2902; GFX900-NEXT:    s_setpc_b64 s[30:31]2903;2904; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_6:2905; GFX90A:       ; %bb.0:2906; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2907; GFX90A-NEXT:    ;;#ASMSTART2908; GFX90A-NEXT:    ; def v[0:1]2909; GFX90A-NEXT:    ;;#ASMEND2910; GFX90A-NEXT:    s_mov_b32 s4, 0x50401002911; GFX90A-NEXT:    v_mov_b32_e32 v4, 02912; GFX90A-NEXT:    ;;#ASMSTART2913; GFX90A-NEXT:    ; def v[2:3]2914; GFX90A-NEXT:    ;;#ASMEND2915; GFX90A-NEXT:    v_perm_b32 v0, v3, v0, s42916; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2917; GFX90A-NEXT:    s_waitcnt vmcnt(0)2918; GFX90A-NEXT:    s_setpc_b64 s[30:31]2919;2920; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_6:2921; GFX942:       ; %bb.0:2922; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2923; GFX942-NEXT:    ;;#ASMSTART2924; GFX942-NEXT:    ; def v[0:1]2925; GFX942-NEXT:    ;;#ASMEND2926; GFX942-NEXT:    s_mov_b32 s2, 0x50401002927; GFX942-NEXT:    v_mov_b32_e32 v4, 02928; GFX942-NEXT:    ;;#ASMSTART2929; GFX942-NEXT:    ; def v[2:3]2930; GFX942-NEXT:    ;;#ASMEND2931; GFX942-NEXT:    s_nop 02932; GFX942-NEXT:    v_perm_b32 v0, v3, v0, s22933; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2934; GFX942-NEXT:    s_waitcnt vmcnt(0)2935; GFX942-NEXT:    s_setpc_b64 s[30:31]2936  %vec0 = call <4 x half> asm "; def $0", "=v"()2937  %vec1 = call <4 x half> asm "; def $0", "=v"()2938  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 6>2939  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42940  ret void2941}2942 2943define void @v_shuffle_v2f16_v4f16__1_6(ptr addrspace(1) inreg %ptr) {2944; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_6:2945; GFX900:       ; %bb.0:2946; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2947; GFX900-NEXT:    ;;#ASMSTART2948; GFX900-NEXT:    ; def v[0:1]2949; GFX900-NEXT:    ;;#ASMEND2950; GFX900-NEXT:    v_mov_b32_e32 v3, 02951; GFX900-NEXT:    ;;#ASMSTART2952; GFX900-NEXT:    ; def v[1:2]2953; GFX900-NEXT:    ;;#ASMEND2954; GFX900-NEXT:    v_alignbit_b32 v0, v2, v0, 162955; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]2956; GFX900-NEXT:    s_waitcnt vmcnt(0)2957; GFX900-NEXT:    s_setpc_b64 s[30:31]2958;2959; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_6:2960; GFX90A:       ; %bb.0:2961; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2962; GFX90A-NEXT:    ;;#ASMSTART2963; GFX90A-NEXT:    ; def v[0:1]2964; GFX90A-NEXT:    ;;#ASMEND2965; GFX90A-NEXT:    v_mov_b32_e32 v4, 02966; GFX90A-NEXT:    ;;#ASMSTART2967; GFX90A-NEXT:    ; def v[2:3]2968; GFX90A-NEXT:    ;;#ASMEND2969; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v0, 162970; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]2971; GFX90A-NEXT:    s_waitcnt vmcnt(0)2972; GFX90A-NEXT:    s_setpc_b64 s[30:31]2973;2974; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_6:2975; GFX942:       ; %bb.0:2976; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2977; GFX942-NEXT:    ;;#ASMSTART2978; GFX942-NEXT:    ; def v[0:1]2979; GFX942-NEXT:    ;;#ASMEND2980; GFX942-NEXT:    v_mov_b32_e32 v4, 02981; GFX942-NEXT:    ;;#ASMSTART2982; GFX942-NEXT:    ; def v[2:3]2983; GFX942-NEXT:    ;;#ASMEND2984; GFX942-NEXT:    s_nop 02985; GFX942-NEXT:    v_alignbit_b32 v0, v3, v0, 162986; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]2987; GFX942-NEXT:    s_waitcnt vmcnt(0)2988; GFX942-NEXT:    s_setpc_b64 s[30:31]2989  %vec0 = call <4 x half> asm "; def $0", "=v"()2990  %vec1 = call <4 x half> asm "; def $0", "=v"()2991  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 6>2992  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 42993  ret void2994}2995 2996define void @v_shuffle_v2f16_v4f16__2_6(ptr addrspace(1) inreg %ptr) {2997; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_6:2998; GFX900:       ; %bb.0:2999; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3000; GFX900-NEXT:    ;;#ASMSTART3001; GFX900-NEXT:    ; def v[0:1]3002; GFX900-NEXT:    ;;#ASMEND3003; GFX900-NEXT:    s_mov_b32 s4, 0x50401003004; GFX900-NEXT:    v_mov_b32_e32 v4, 03005; GFX900-NEXT:    ;;#ASMSTART3006; GFX900-NEXT:    ; def v[2:3]3007; GFX900-NEXT:    ;;#ASMEND3008; GFX900-NEXT:    v_perm_b32 v0, v3, v1, s43009; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3010; GFX900-NEXT:    s_waitcnt vmcnt(0)3011; GFX900-NEXT:    s_setpc_b64 s[30:31]3012;3013; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_6:3014; GFX90A:       ; %bb.0:3015; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3016; GFX90A-NEXT:    ;;#ASMSTART3017; GFX90A-NEXT:    ; def v[0:1]3018; GFX90A-NEXT:    ;;#ASMEND3019; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003020; GFX90A-NEXT:    v_mov_b32_e32 v4, 03021; GFX90A-NEXT:    ;;#ASMSTART3022; GFX90A-NEXT:    ; def v[2:3]3023; GFX90A-NEXT:    ;;#ASMEND3024; GFX90A-NEXT:    v_perm_b32 v0, v3, v1, s43025; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3026; GFX90A-NEXT:    s_waitcnt vmcnt(0)3027; GFX90A-NEXT:    s_setpc_b64 s[30:31]3028;3029; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_6:3030; GFX942:       ; %bb.0:3031; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3032; GFX942-NEXT:    ;;#ASMSTART3033; GFX942-NEXT:    ; def v[0:1]3034; GFX942-NEXT:    ;;#ASMEND3035; GFX942-NEXT:    s_mov_b32 s2, 0x50401003036; GFX942-NEXT:    v_mov_b32_e32 v4, 03037; GFX942-NEXT:    ;;#ASMSTART3038; GFX942-NEXT:    ; def v[2:3]3039; GFX942-NEXT:    ;;#ASMEND3040; GFX942-NEXT:    s_nop 03041; GFX942-NEXT:    v_perm_b32 v0, v3, v1, s23042; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3043; GFX942-NEXT:    s_waitcnt vmcnt(0)3044; GFX942-NEXT:    s_setpc_b64 s[30:31]3045  %vec0 = call <4 x half> asm "; def $0", "=v"()3046  %vec1 = call <4 x half> asm "; def $0", "=v"()3047  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 6>3048  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43049  ret void3050}3051 3052define void @v_shuffle_v2f16_v4f16__3_6(ptr addrspace(1) inreg %ptr) {3053; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_6:3054; GFX900:       ; %bb.0:3055; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3056; GFX900-NEXT:    ;;#ASMSTART3057; GFX900-NEXT:    ; def v[0:1]3058; GFX900-NEXT:    ;;#ASMEND3059; GFX900-NEXT:    v_mov_b32_e32 v4, 03060; GFX900-NEXT:    ;;#ASMSTART3061; GFX900-NEXT:    ; def v[2:3]3062; GFX900-NEXT:    ;;#ASMEND3063; GFX900-NEXT:    v_alignbit_b32 v0, v3, v1, 163064; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3065; GFX900-NEXT:    s_waitcnt vmcnt(0)3066; GFX900-NEXT:    s_setpc_b64 s[30:31]3067;3068; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_6:3069; GFX90A:       ; %bb.0:3070; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3071; GFX90A-NEXT:    ;;#ASMSTART3072; GFX90A-NEXT:    ; def v[0:1]3073; GFX90A-NEXT:    ;;#ASMEND3074; GFX90A-NEXT:    v_mov_b32_e32 v4, 03075; GFX90A-NEXT:    ;;#ASMSTART3076; GFX90A-NEXT:    ; def v[2:3]3077; GFX90A-NEXT:    ;;#ASMEND3078; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v1, 163079; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3080; GFX90A-NEXT:    s_waitcnt vmcnt(0)3081; GFX90A-NEXT:    s_setpc_b64 s[30:31]3082;3083; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_6:3084; GFX942:       ; %bb.0:3085; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3086; GFX942-NEXT:    ;;#ASMSTART3087; GFX942-NEXT:    ; def v[0:1]3088; GFX942-NEXT:    ;;#ASMEND3089; GFX942-NEXT:    v_mov_b32_e32 v4, 03090; GFX942-NEXT:    ;;#ASMSTART3091; GFX942-NEXT:    ; def v[2:3]3092; GFX942-NEXT:    ;;#ASMEND3093; GFX942-NEXT:    s_nop 03094; GFX942-NEXT:    v_alignbit_b32 v0, v3, v1, 163095; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3096; GFX942-NEXT:    s_waitcnt vmcnt(0)3097; GFX942-NEXT:    s_setpc_b64 s[30:31]3098  %vec0 = call <4 x half> asm "; def $0", "=v"()3099  %vec1 = call <4 x half> asm "; def $0", "=v"()3100  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 6>3101  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43102  ret void3103}3104 3105define void @v_shuffle_v2f16_v4f16__4_6(ptr addrspace(1) inreg %ptr) {3106; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_6:3107; GFX900:       ; %bb.0:3108; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3109; GFX900-NEXT:    ;;#ASMSTART3110; GFX900-NEXT:    ; def v[0:1]3111; GFX900-NEXT:    ;;#ASMEND3112; GFX900-NEXT:    s_mov_b32 s4, 0x50401003113; GFX900-NEXT:    v_mov_b32_e32 v2, 03114; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s43115; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3116; GFX900-NEXT:    s_waitcnt vmcnt(0)3117; GFX900-NEXT:    s_setpc_b64 s[30:31]3118;3119; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_6:3120; GFX90A:       ; %bb.0:3121; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX90A-NEXT:    ;;#ASMSTART3123; GFX90A-NEXT:    ; def v[0:1]3124; GFX90A-NEXT:    ;;#ASMEND3125; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003126; GFX90A-NEXT:    v_mov_b32_e32 v2, 03127; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s43128; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3129; GFX90A-NEXT:    s_waitcnt vmcnt(0)3130; GFX90A-NEXT:    s_setpc_b64 s[30:31]3131;3132; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_6:3133; GFX942:       ; %bb.0:3134; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3135; GFX942-NEXT:    ;;#ASMSTART3136; GFX942-NEXT:    ; def v[0:1]3137; GFX942-NEXT:    ;;#ASMEND3138; GFX942-NEXT:    s_mov_b32 s2, 0x50401003139; GFX942-NEXT:    v_mov_b32_e32 v2, 03140; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s23141; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3142; GFX942-NEXT:    s_waitcnt vmcnt(0)3143; GFX942-NEXT:    s_setpc_b64 s[30:31]3144  %vec0 = call <4 x half> asm "; def $0", "=v"()3145  %vec1 = call <4 x half> asm "; def $0", "=v"()3146  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 6>3147  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43148  ret void3149}3150 3151define void @v_shuffle_v2f16_v4f16__5_6(ptr addrspace(1) inreg %ptr) {3152; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_6:3153; GFX900:       ; %bb.0:3154; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3155; GFX900-NEXT:    ;;#ASMSTART3156; GFX900-NEXT:    ; def v[0:1]3157; GFX900-NEXT:    ;;#ASMEND3158; GFX900-NEXT:    v_mov_b32_e32 v2, 03159; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 163160; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3161; GFX900-NEXT:    s_waitcnt vmcnt(0)3162; GFX900-NEXT:    s_setpc_b64 s[30:31]3163;3164; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_6:3165; GFX90A:       ; %bb.0:3166; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3167; GFX90A-NEXT:    ;;#ASMSTART3168; GFX90A-NEXT:    ; def v[0:1]3169; GFX90A-NEXT:    ;;#ASMEND3170; GFX90A-NEXT:    v_mov_b32_e32 v2, 03171; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 163172; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3173; GFX90A-NEXT:    s_waitcnt vmcnt(0)3174; GFX90A-NEXT:    s_setpc_b64 s[30:31]3175;3176; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_6:3177; GFX942:       ; %bb.0:3178; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3179; GFX942-NEXT:    ;;#ASMSTART3180; GFX942-NEXT:    ; def v[0:1]3181; GFX942-NEXT:    ;;#ASMEND3182; GFX942-NEXT:    v_mov_b32_e32 v2, 03183; GFX942-NEXT:    v_alignbit_b32 v0, v1, v0, 163184; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3185; GFX942-NEXT:    s_waitcnt vmcnt(0)3186; GFX942-NEXT:    s_setpc_b64 s[30:31]3187  %vec0 = call <4 x half> asm "; def $0", "=v"()3188  %vec1 = call <4 x half> asm "; def $0", "=v"()3189  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 6>3190  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43191  ret void3192}3193 3194define void @v_shuffle_v2f16_v4f16__6_6(ptr addrspace(1) inreg %ptr) {3195; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_6:3196; GFX900:       ; %bb.0:3197; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3198; GFX900-NEXT:    ;;#ASMSTART3199; GFX900-NEXT:    ; def v[0:1]3200; GFX900-NEXT:    ;;#ASMEND3201; GFX900-NEXT:    s_mov_b32 s4, 0x50401003202; GFX900-NEXT:    v_mov_b32_e32 v2, 03203; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s43204; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3205; GFX900-NEXT:    s_waitcnt vmcnt(0)3206; GFX900-NEXT:    s_setpc_b64 s[30:31]3207;3208; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_6:3209; GFX90A:       ; %bb.0:3210; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3211; GFX90A-NEXT:    ;;#ASMSTART3212; GFX90A-NEXT:    ; def v[0:1]3213; GFX90A-NEXT:    ;;#ASMEND3214; GFX90A-NEXT:    s_mov_b32 s4, 0x50401003215; GFX90A-NEXT:    v_mov_b32_e32 v2, 03216; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s43217; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3218; GFX90A-NEXT:    s_waitcnt vmcnt(0)3219; GFX90A-NEXT:    s_setpc_b64 s[30:31]3220;3221; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_6:3222; GFX942:       ; %bb.0:3223; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3224; GFX942-NEXT:    ;;#ASMSTART3225; GFX942-NEXT:    ; def v[0:1]3226; GFX942-NEXT:    ;;#ASMEND3227; GFX942-NEXT:    s_mov_b32 s2, 0x50401003228; GFX942-NEXT:    v_mov_b32_e32 v2, 03229; GFX942-NEXT:    v_perm_b32 v0, v1, v1, s23230; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3231; GFX942-NEXT:    s_waitcnt vmcnt(0)3232; GFX942-NEXT:    s_setpc_b64 s[30:31]3233  %vec0 = call <4 x half> asm "; def $0", "=v"()3234  %vec1 = call <4 x half> asm "; def $0", "=v"()3235  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 6>3236  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43237  ret void3238}3239 3240define void @v_shuffle_v2f16_v4f16__u_7(ptr addrspace(1) inreg %ptr) {3241; GFX900-LABEL: v_shuffle_v2f16_v4f16__u_7:3242; GFX900:       ; %bb.0:3243; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3244; GFX900-NEXT:    v_mov_b32_e32 v2, 03245; GFX900-NEXT:    ;;#ASMSTART3246; GFX900-NEXT:    ; def v[0:1]3247; GFX900-NEXT:    ;;#ASMEND3248; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3249; GFX900-NEXT:    s_waitcnt vmcnt(0)3250; GFX900-NEXT:    s_setpc_b64 s[30:31]3251;3252; GFX90A-LABEL: v_shuffle_v2f16_v4f16__u_7:3253; GFX90A:       ; %bb.0:3254; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3255; GFX90A-NEXT:    v_mov_b32_e32 v2, 03256; GFX90A-NEXT:    ;;#ASMSTART3257; GFX90A-NEXT:    ; def v[0:1]3258; GFX90A-NEXT:    ;;#ASMEND3259; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3260; GFX90A-NEXT:    s_waitcnt vmcnt(0)3261; GFX90A-NEXT:    s_setpc_b64 s[30:31]3262;3263; GFX942-LABEL: v_shuffle_v2f16_v4f16__u_7:3264; GFX942:       ; %bb.0:3265; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX942-NEXT:    v_mov_b32_e32 v2, 03267; GFX942-NEXT:    ;;#ASMSTART3268; GFX942-NEXT:    ; def v[0:1]3269; GFX942-NEXT:    ;;#ASMEND3270; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3271; GFX942-NEXT:    s_waitcnt vmcnt(0)3272; GFX942-NEXT:    s_setpc_b64 s[30:31]3273  %vec0 = call <4 x half> asm "; def $0", "=v"()3274  %vec1 = call <4 x half> asm "; def $0", "=v"()3275  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 7>3276  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43277  ret void3278}3279 3280define void @v_shuffle_v2f16_v4f16__0_7(ptr addrspace(1) inreg %ptr) {3281; GFX900-LABEL: v_shuffle_v2f16_v4f16__0_7:3282; GFX900:       ; %bb.0:3283; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3284; GFX900-NEXT:    ;;#ASMSTART3285; GFX900-NEXT:    ; def v[0:1]3286; GFX900-NEXT:    ;;#ASMEND3287; GFX900-NEXT:    s_mov_b32 s4, 0xffff3288; GFX900-NEXT:    v_mov_b32_e32 v3, 03289; GFX900-NEXT:    ;;#ASMSTART3290; GFX900-NEXT:    ; def v[1:2]3291; GFX900-NEXT:    ;;#ASMEND3292; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v23293; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3294; GFX900-NEXT:    s_waitcnt vmcnt(0)3295; GFX900-NEXT:    s_setpc_b64 s[30:31]3296;3297; GFX90A-LABEL: v_shuffle_v2f16_v4f16__0_7:3298; GFX90A:       ; %bb.0:3299; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3300; GFX90A-NEXT:    ;;#ASMSTART3301; GFX90A-NEXT:    ; def v[0:1]3302; GFX90A-NEXT:    ;;#ASMEND3303; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3304; GFX90A-NEXT:    v_mov_b32_e32 v4, 03305; GFX90A-NEXT:    ;;#ASMSTART3306; GFX90A-NEXT:    ; def v[2:3]3307; GFX90A-NEXT:    ;;#ASMEND3308; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v33309; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3310; GFX90A-NEXT:    s_waitcnt vmcnt(0)3311; GFX90A-NEXT:    s_setpc_b64 s[30:31]3312;3313; GFX942-LABEL: v_shuffle_v2f16_v4f16__0_7:3314; GFX942:       ; %bb.0:3315; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3316; GFX942-NEXT:    ;;#ASMSTART3317; GFX942-NEXT:    ; def v[0:1]3318; GFX942-NEXT:    ;;#ASMEND3319; GFX942-NEXT:    s_mov_b32 s2, 0xffff3320; GFX942-NEXT:    v_mov_b32_e32 v4, 03321; GFX942-NEXT:    ;;#ASMSTART3322; GFX942-NEXT:    ; def v[2:3]3323; GFX942-NEXT:    ;;#ASMEND3324; GFX942-NEXT:    s_nop 03325; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v33326; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3327; GFX942-NEXT:    s_waitcnt vmcnt(0)3328; GFX942-NEXT:    s_setpc_b64 s[30:31]3329  %vec0 = call <4 x half> asm "; def $0", "=v"()3330  %vec1 = call <4 x half> asm "; def $0", "=v"()3331  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 7>3332  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43333  ret void3334}3335 3336define void @v_shuffle_v2f16_v4f16__1_7(ptr addrspace(1) inreg %ptr) {3337; GFX900-LABEL: v_shuffle_v2f16_v4f16__1_7:3338; GFX900:       ; %bb.0:3339; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX900-NEXT:    ;;#ASMSTART3341; GFX900-NEXT:    ; def v[0:1]3342; GFX900-NEXT:    ;;#ASMEND3343; GFX900-NEXT:    s_mov_b32 s4, 0x70603023344; GFX900-NEXT:    v_mov_b32_e32 v3, 03345; GFX900-NEXT:    ;;#ASMSTART3346; GFX900-NEXT:    ; def v[1:2]3347; GFX900-NEXT:    ;;#ASMEND3348; GFX900-NEXT:    v_perm_b32 v0, v2, v0, s43349; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]3350; GFX900-NEXT:    s_waitcnt vmcnt(0)3351; GFX900-NEXT:    s_setpc_b64 s[30:31]3352;3353; GFX90A-LABEL: v_shuffle_v2f16_v4f16__1_7:3354; GFX90A:       ; %bb.0:3355; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3356; GFX90A-NEXT:    ;;#ASMSTART3357; GFX90A-NEXT:    ; def v[0:1]3358; GFX90A-NEXT:    ;;#ASMEND3359; GFX90A-NEXT:    s_mov_b32 s4, 0x70603023360; GFX90A-NEXT:    v_mov_b32_e32 v4, 03361; GFX90A-NEXT:    ;;#ASMSTART3362; GFX90A-NEXT:    ; def v[2:3]3363; GFX90A-NEXT:    ;;#ASMEND3364; GFX90A-NEXT:    v_perm_b32 v0, v3, v0, s43365; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3366; GFX90A-NEXT:    s_waitcnt vmcnt(0)3367; GFX90A-NEXT:    s_setpc_b64 s[30:31]3368;3369; GFX942-LABEL: v_shuffle_v2f16_v4f16__1_7:3370; GFX942:       ; %bb.0:3371; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3372; GFX942-NEXT:    ;;#ASMSTART3373; GFX942-NEXT:    ; def v[0:1]3374; GFX942-NEXT:    ;;#ASMEND3375; GFX942-NEXT:    s_mov_b32 s2, 0x70603023376; GFX942-NEXT:    v_mov_b32_e32 v4, 03377; GFX942-NEXT:    ;;#ASMSTART3378; GFX942-NEXT:    ; def v[2:3]3379; GFX942-NEXT:    ;;#ASMEND3380; GFX942-NEXT:    s_nop 03381; GFX942-NEXT:    v_perm_b32 v0, v3, v0, s23382; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3383; GFX942-NEXT:    s_waitcnt vmcnt(0)3384; GFX942-NEXT:    s_setpc_b64 s[30:31]3385  %vec0 = call <4 x half> asm "; def $0", "=v"()3386  %vec1 = call <4 x half> asm "; def $0", "=v"()3387  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 7>3388  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43389  ret void3390}3391 3392define void @v_shuffle_v2f16_v4f16__2_7(ptr addrspace(1) inreg %ptr) {3393; GFX900-LABEL: v_shuffle_v2f16_v4f16__2_7:3394; GFX900:       ; %bb.0:3395; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3396; GFX900-NEXT:    ;;#ASMSTART3397; GFX900-NEXT:    ; def v[0:1]3398; GFX900-NEXT:    ;;#ASMEND3399; GFX900-NEXT:    s_mov_b32 s4, 0xffff3400; GFX900-NEXT:    v_mov_b32_e32 v4, 03401; GFX900-NEXT:    ;;#ASMSTART3402; GFX900-NEXT:    ; def v[2:3]3403; GFX900-NEXT:    ;;#ASMEND3404; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v33405; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3406; GFX900-NEXT:    s_waitcnt vmcnt(0)3407; GFX900-NEXT:    s_setpc_b64 s[30:31]3408;3409; GFX90A-LABEL: v_shuffle_v2f16_v4f16__2_7:3410; GFX90A:       ; %bb.0:3411; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3412; GFX90A-NEXT:    ;;#ASMSTART3413; GFX90A-NEXT:    ; def v[0:1]3414; GFX90A-NEXT:    ;;#ASMEND3415; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3416; GFX90A-NEXT:    v_mov_b32_e32 v4, 03417; GFX90A-NEXT:    ;;#ASMSTART3418; GFX90A-NEXT:    ; def v[2:3]3419; GFX90A-NEXT:    ;;#ASMEND3420; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v33421; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3422; GFX90A-NEXT:    s_waitcnt vmcnt(0)3423; GFX90A-NEXT:    s_setpc_b64 s[30:31]3424;3425; GFX942-LABEL: v_shuffle_v2f16_v4f16__2_7:3426; GFX942:       ; %bb.0:3427; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX942-NEXT:    ;;#ASMSTART3429; GFX942-NEXT:    ; def v[0:1]3430; GFX942-NEXT:    ;;#ASMEND3431; GFX942-NEXT:    s_mov_b32 s2, 0xffff3432; GFX942-NEXT:    v_mov_b32_e32 v4, 03433; GFX942-NEXT:    ;;#ASMSTART3434; GFX942-NEXT:    ; def v[2:3]3435; GFX942-NEXT:    ;;#ASMEND3436; GFX942-NEXT:    s_nop 03437; GFX942-NEXT:    v_bfi_b32 v0, s2, v1, v33438; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3439; GFX942-NEXT:    s_waitcnt vmcnt(0)3440; GFX942-NEXT:    s_setpc_b64 s[30:31]3441  %vec0 = call <4 x half> asm "; def $0", "=v"()3442  %vec1 = call <4 x half> asm "; def $0", "=v"()3443  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 7>3444  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43445  ret void3446}3447 3448define void @v_shuffle_v2f16_v4f16__3_7(ptr addrspace(1) inreg %ptr) {3449; GFX900-LABEL: v_shuffle_v2f16_v4f16__3_7:3450; GFX900:       ; %bb.0:3451; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3452; GFX900-NEXT:    ;;#ASMSTART3453; GFX900-NEXT:    ; def v[0:1]3454; GFX900-NEXT:    ;;#ASMEND3455; GFX900-NEXT:    s_mov_b32 s4, 0x70603023456; GFX900-NEXT:    v_mov_b32_e32 v4, 03457; GFX900-NEXT:    ;;#ASMSTART3458; GFX900-NEXT:    ; def v[2:3]3459; GFX900-NEXT:    ;;#ASMEND3460; GFX900-NEXT:    v_perm_b32 v0, v3, v1, s43461; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]3462; GFX900-NEXT:    s_waitcnt vmcnt(0)3463; GFX900-NEXT:    s_setpc_b64 s[30:31]3464;3465; GFX90A-LABEL: v_shuffle_v2f16_v4f16__3_7:3466; GFX90A:       ; %bb.0:3467; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3468; GFX90A-NEXT:    ;;#ASMSTART3469; GFX90A-NEXT:    ; def v[0:1]3470; GFX90A-NEXT:    ;;#ASMEND3471; GFX90A-NEXT:    s_mov_b32 s4, 0x70603023472; GFX90A-NEXT:    v_mov_b32_e32 v4, 03473; GFX90A-NEXT:    ;;#ASMSTART3474; GFX90A-NEXT:    ; def v[2:3]3475; GFX90A-NEXT:    ;;#ASMEND3476; GFX90A-NEXT:    v_perm_b32 v0, v3, v1, s43477; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]3478; GFX90A-NEXT:    s_waitcnt vmcnt(0)3479; GFX90A-NEXT:    s_setpc_b64 s[30:31]3480;3481; GFX942-LABEL: v_shuffle_v2f16_v4f16__3_7:3482; GFX942:       ; %bb.0:3483; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3484; GFX942-NEXT:    ;;#ASMSTART3485; GFX942-NEXT:    ; def v[0:1]3486; GFX942-NEXT:    ;;#ASMEND3487; GFX942-NEXT:    s_mov_b32 s2, 0x70603023488; GFX942-NEXT:    v_mov_b32_e32 v4, 03489; GFX942-NEXT:    ;;#ASMSTART3490; GFX942-NEXT:    ; def v[2:3]3491; GFX942-NEXT:    ;;#ASMEND3492; GFX942-NEXT:    s_nop 03493; GFX942-NEXT:    v_perm_b32 v0, v3, v1, s23494; GFX942-NEXT:    global_store_dword v4, v0, s[0:1]3495; GFX942-NEXT:    s_waitcnt vmcnt(0)3496; GFX942-NEXT:    s_setpc_b64 s[30:31]3497  %vec0 = call <4 x half> asm "; def $0", "=v"()3498  %vec1 = call <4 x half> asm "; def $0", "=v"()3499  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 7>3500  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43501  ret void3502}3503 3504define void @v_shuffle_v2f16_v4f16__4_7(ptr addrspace(1) inreg %ptr) {3505; GFX900-LABEL: v_shuffle_v2f16_v4f16__4_7: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, 0xffff3512; GFX900-NEXT:    v_mov_b32_e32 v2, 03513; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v13514; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3515; GFX900-NEXT:    s_waitcnt vmcnt(0)3516; GFX900-NEXT:    s_setpc_b64 s[30:31]3517;3518; GFX90A-LABEL: v_shuffle_v2f16_v4f16__4_7:3519; GFX90A:       ; %bb.0:3520; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3521; GFX90A-NEXT:    ;;#ASMSTART3522; GFX90A-NEXT:    ; def v[0:1]3523; GFX90A-NEXT:    ;;#ASMEND3524; GFX90A-NEXT:    s_mov_b32 s4, 0xffff3525; GFX90A-NEXT:    v_mov_b32_e32 v2, 03526; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v13527; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3528; GFX90A-NEXT:    s_waitcnt vmcnt(0)3529; GFX90A-NEXT:    s_setpc_b64 s[30:31]3530;3531; GFX942-LABEL: v_shuffle_v2f16_v4f16__4_7:3532; GFX942:       ; %bb.0:3533; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3534; GFX942-NEXT:    ;;#ASMSTART3535; GFX942-NEXT:    ; def v[0:1]3536; GFX942-NEXT:    ;;#ASMEND3537; GFX942-NEXT:    s_mov_b32 s2, 0xffff3538; GFX942-NEXT:    v_mov_b32_e32 v2, 03539; GFX942-NEXT:    v_bfi_b32 v0, s2, v0, v13540; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3541; GFX942-NEXT:    s_waitcnt vmcnt(0)3542; GFX942-NEXT:    s_setpc_b64 s[30:31]3543  %vec0 = call <4 x half> asm "; def $0", "=v"()3544  %vec1 = call <4 x half> asm "; def $0", "=v"()3545  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 7>3546  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43547  ret void3548}3549 3550define void @v_shuffle_v2f16_v4f16__5_7(ptr addrspace(1) inreg %ptr) {3551; GFX900-LABEL: v_shuffle_v2f16_v4f16__5_7:3552; GFX900:       ; %bb.0:3553; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3554; GFX900-NEXT:    ;;#ASMSTART3555; GFX900-NEXT:    ; def v[0:1]3556; GFX900-NEXT:    ;;#ASMEND3557; GFX900-NEXT:    s_mov_b32 s4, 0x70603023558; GFX900-NEXT:    v_mov_b32_e32 v2, 03559; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s43560; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]3561; GFX900-NEXT:    s_waitcnt vmcnt(0)3562; GFX900-NEXT:    s_setpc_b64 s[30:31]3563;3564; GFX90A-LABEL: v_shuffle_v2f16_v4f16__5_7:3565; GFX90A:       ; %bb.0:3566; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3567; GFX90A-NEXT:    ;;#ASMSTART3568; GFX90A-NEXT:    ; def v[0:1]3569; GFX90A-NEXT:    ;;#ASMEND3570; GFX90A-NEXT:    s_mov_b32 s4, 0x70603023571; GFX90A-NEXT:    v_mov_b32_e32 v2, 03572; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s43573; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]3574; GFX90A-NEXT:    s_waitcnt vmcnt(0)3575; GFX90A-NEXT:    s_setpc_b64 s[30:31]3576;3577; GFX942-LABEL: v_shuffle_v2f16_v4f16__5_7:3578; GFX942:       ; %bb.0:3579; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3580; GFX942-NEXT:    ;;#ASMSTART3581; GFX942-NEXT:    ; def v[0:1]3582; GFX942-NEXT:    ;;#ASMEND3583; GFX942-NEXT:    s_mov_b32 s2, 0x70603023584; GFX942-NEXT:    v_mov_b32_e32 v2, 03585; GFX942-NEXT:    v_perm_b32 v0, v1, v0, s23586; GFX942-NEXT:    global_store_dword v2, v0, s[0:1]3587; GFX942-NEXT:    s_waitcnt vmcnt(0)3588; GFX942-NEXT:    s_setpc_b64 s[30:31]3589  %vec0 = call <4 x half> asm "; def $0", "=v"()3590  %vec1 = call <4 x half> asm "; def $0", "=v"()3591  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 7>3592  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43593  ret void3594}3595 3596define void @v_shuffle_v2f16_v4f16__6_7(ptr addrspace(1) inreg %ptr) {3597; GFX900-LABEL: v_shuffle_v2f16_v4f16__6_7:3598; GFX900:       ; %bb.0:3599; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3600; GFX900-NEXT:    v_mov_b32_e32 v2, 03601; GFX900-NEXT:    ;;#ASMSTART3602; GFX900-NEXT:    ; def v[0:1]3603; GFX900-NEXT:    ;;#ASMEND3604; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]3605; GFX900-NEXT:    s_waitcnt vmcnt(0)3606; GFX900-NEXT:    s_setpc_b64 s[30:31]3607;3608; GFX90A-LABEL: v_shuffle_v2f16_v4f16__6_7:3609; GFX90A:       ; %bb.0:3610; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3611; GFX90A-NEXT:    v_mov_b32_e32 v2, 03612; GFX90A-NEXT:    ;;#ASMSTART3613; GFX90A-NEXT:    ; def v[0:1]3614; GFX90A-NEXT:    ;;#ASMEND3615; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]3616; GFX90A-NEXT:    s_waitcnt vmcnt(0)3617; GFX90A-NEXT:    s_setpc_b64 s[30:31]3618;3619; GFX942-LABEL: v_shuffle_v2f16_v4f16__6_7:3620; GFX942:       ; %bb.0:3621; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3622; GFX942-NEXT:    v_mov_b32_e32 v2, 03623; GFX942-NEXT:    ;;#ASMSTART3624; GFX942-NEXT:    ; def v[0:1]3625; GFX942-NEXT:    ;;#ASMEND3626; GFX942-NEXT:    global_store_dword v2, v1, s[0:1]3627; GFX942-NEXT:    s_waitcnt vmcnt(0)3628; GFX942-NEXT:    s_setpc_b64 s[30:31]3629  %vec0 = call <4 x half> asm "; def $0", "=v"()3630  %vec1 = call <4 x half> asm "; def $0", "=v"()3631  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 7>3632  store <2 x half> %shuf, ptr addrspace(1) %ptr, align 43633  ret void3634}3635 3636define void @s_shuffle_v2f16_v4f16__u_u() {3637; GFX9-LABEL: s_shuffle_v2f16_v4f16__u_u:3638; GFX9:       ; %bb.0:3639; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3640; GFX9-NEXT:    ;;#ASMSTART3641; GFX9-NEXT:    ; use s83642; GFX9-NEXT:    ;;#ASMEND3643; GFX9-NEXT:    s_setpc_b64 s[30:31]3644  %vec0 = call <4 x half> asm "; def $0", "=s"()3645  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> poison3646  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3647  ret void3648}3649 3650define void @s_shuffle_v2f16_v4f16__0_u() {3651; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_u:3652; GFX900:       ; %bb.0:3653; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3654; GFX900-NEXT:    ;;#ASMSTART3655; GFX900-NEXT:    ; def s[8:9]3656; GFX900-NEXT:    ;;#ASMEND3657; GFX900-NEXT:    ;;#ASMSTART3658; GFX900-NEXT:    ; use s83659; GFX900-NEXT:    ;;#ASMEND3660; GFX900-NEXT:    s_setpc_b64 s[30:31]3661;3662; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_u:3663; GFX90A:       ; %bb.0:3664; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3665; GFX90A-NEXT:    ;;#ASMSTART3666; GFX90A-NEXT:    ; def s[8:9]3667; GFX90A-NEXT:    ;;#ASMEND3668; GFX90A-NEXT:    ;;#ASMSTART3669; GFX90A-NEXT:    ; use s83670; GFX90A-NEXT:    ;;#ASMEND3671; GFX90A-NEXT:    s_setpc_b64 s[30:31]3672;3673; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_u:3674; GFX942:       ; %bb.0:3675; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3676; GFX942-NEXT:    ;;#ASMSTART3677; GFX942-NEXT:    ; def s[8:9]3678; GFX942-NEXT:    ;;#ASMEND3679; GFX942-NEXT:    s_nop 03680; GFX942-NEXT:    ;;#ASMSTART3681; GFX942-NEXT:    ; use s83682; GFX942-NEXT:    ;;#ASMEND3683; GFX942-NEXT:    s_setpc_b64 s[30:31]3684  %vec0 = call <4 x half> asm "; def $0", "=s"()3685  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 poison>3686  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3687  ret void3688}3689 3690define void @s_shuffle_v2f16_v4f16__1_u() {3691; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_u:3692; GFX900:       ; %bb.0:3693; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3694; GFX900-NEXT:    ;;#ASMSTART3695; GFX900-NEXT:    ; def s[4:5]3696; GFX900-NEXT:    ;;#ASMEND3697; GFX900-NEXT:    s_lshr_b32 s8, s4, 163698; GFX900-NEXT:    ;;#ASMSTART3699; GFX900-NEXT:    ; use s83700; GFX900-NEXT:    ;;#ASMEND3701; GFX900-NEXT:    s_setpc_b64 s[30:31]3702;3703; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_u:3704; GFX90A:       ; %bb.0:3705; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3706; GFX90A-NEXT:    ;;#ASMSTART3707; GFX90A-NEXT:    ; def s[4:5]3708; GFX90A-NEXT:    ;;#ASMEND3709; GFX90A-NEXT:    s_lshr_b32 s8, s4, 163710; GFX90A-NEXT:    ;;#ASMSTART3711; GFX90A-NEXT:    ; use s83712; GFX90A-NEXT:    ;;#ASMEND3713; GFX90A-NEXT:    s_setpc_b64 s[30:31]3714;3715; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_u:3716; GFX942:       ; %bb.0:3717; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3718; GFX942-NEXT:    ;;#ASMSTART3719; GFX942-NEXT:    ; def s[0:1]3720; GFX942-NEXT:    ;;#ASMEND3721; GFX942-NEXT:    s_lshr_b32 s8, s0, 163722; GFX942-NEXT:    ;;#ASMSTART3723; GFX942-NEXT:    ; use s83724; GFX942-NEXT:    ;;#ASMEND3725; GFX942-NEXT:    s_setpc_b64 s[30:31]3726  %vec0 = call <4 x half> asm "; def $0", "=s"()3727  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 poison>3728  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3729  ret void3730}3731 3732define void @s_shuffle_v2f16_v4f16__2_u() {3733; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_u:3734; GFX900:       ; %bb.0:3735; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3736; GFX900-NEXT:    ;;#ASMSTART3737; GFX900-NEXT:    ; def s[4:5]3738; GFX900-NEXT:    ;;#ASMEND3739; GFX900-NEXT:    s_mov_b32 s8, s53740; GFX900-NEXT:    ;;#ASMSTART3741; GFX900-NEXT:    ; use s83742; GFX900-NEXT:    ;;#ASMEND3743; GFX900-NEXT:    s_setpc_b64 s[30:31]3744;3745; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_u:3746; GFX90A:       ; %bb.0:3747; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3748; GFX90A-NEXT:    ;;#ASMSTART3749; GFX90A-NEXT:    ; def s[4:5]3750; GFX90A-NEXT:    ;;#ASMEND3751; GFX90A-NEXT:    s_mov_b32 s8, s53752; GFX90A-NEXT:    ;;#ASMSTART3753; GFX90A-NEXT:    ; use s83754; GFX90A-NEXT:    ;;#ASMEND3755; GFX90A-NEXT:    s_setpc_b64 s[30:31]3756;3757; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_u:3758; GFX942:       ; %bb.0:3759; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3760; GFX942-NEXT:    ;;#ASMSTART3761; GFX942-NEXT:    ; def s[0:1]3762; GFX942-NEXT:    ;;#ASMEND3763; GFX942-NEXT:    s_mov_b32 s8, s13764; GFX942-NEXT:    ;;#ASMSTART3765; GFX942-NEXT:    ; use s83766; GFX942-NEXT:    ;;#ASMEND3767; GFX942-NEXT:    s_setpc_b64 s[30:31]3768  %vec0 = call <4 x half> asm "; def $0", "=s"()3769  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 poison>3770  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3771  ret void3772}3773 3774define void @s_shuffle_v2f16_v4f16__3_u() {3775; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_u:3776; GFX900:       ; %bb.0:3777; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3778; GFX900-NEXT:    ;;#ASMSTART3779; GFX900-NEXT:    ; def s[4:5]3780; GFX900-NEXT:    ;;#ASMEND3781; GFX900-NEXT:    s_lshr_b32 s8, s5, 163782; GFX900-NEXT:    ;;#ASMSTART3783; GFX900-NEXT:    ; use s83784; GFX900-NEXT:    ;;#ASMEND3785; GFX900-NEXT:    s_setpc_b64 s[30:31]3786;3787; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_u:3788; GFX90A:       ; %bb.0:3789; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3790; GFX90A-NEXT:    ;;#ASMSTART3791; GFX90A-NEXT:    ; def s[4:5]3792; GFX90A-NEXT:    ;;#ASMEND3793; GFX90A-NEXT:    s_lshr_b32 s8, s5, 163794; GFX90A-NEXT:    ;;#ASMSTART3795; GFX90A-NEXT:    ; use s83796; GFX90A-NEXT:    ;;#ASMEND3797; GFX90A-NEXT:    s_setpc_b64 s[30:31]3798;3799; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_u:3800; GFX942:       ; %bb.0:3801; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3802; GFX942-NEXT:    ;;#ASMSTART3803; GFX942-NEXT:    ; def s[0:1]3804; GFX942-NEXT:    ;;#ASMEND3805; GFX942-NEXT:    s_lshr_b32 s8, s1, 163806; GFX942-NEXT:    ;;#ASMSTART3807; GFX942-NEXT:    ; use s83808; GFX942-NEXT:    ;;#ASMEND3809; GFX942-NEXT:    s_setpc_b64 s[30:31]3810  %vec0 = call <4 x half> asm "; def $0", "=s"()3811  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 poison>3812  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3813  ret void3814}3815 3816define void @s_shuffle_v2f16_v4f16__4_u() {3817; GFX9-LABEL: s_shuffle_v2f16_v4f16__4_u:3818; GFX9:       ; %bb.0:3819; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3820; GFX9-NEXT:    ;;#ASMSTART3821; GFX9-NEXT:    ; use s83822; GFX9-NEXT:    ;;#ASMEND3823; GFX9-NEXT:    s_setpc_b64 s[30:31]3824  %vec0 = call <4 x half> asm "; def $0", "=s"()3825  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 poison>3826  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3827  ret void3828}3829 3830define void @s_shuffle_v2f16_v4f16__5_u() {3831; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_u:3832; GFX900:       ; %bb.0:3833; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3834; GFX900-NEXT:    ;;#ASMSTART3835; GFX900-NEXT:    ; def s[4:5]3836; GFX900-NEXT:    ;;#ASMEND3837; GFX900-NEXT:    s_lshr_b32 s8, s4, 163838; GFX900-NEXT:    ;;#ASMSTART3839; GFX900-NEXT:    ; use s83840; GFX900-NEXT:    ;;#ASMEND3841; GFX900-NEXT:    s_setpc_b64 s[30:31]3842;3843; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_u:3844; GFX90A:       ; %bb.0:3845; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3846; GFX90A-NEXT:    ;;#ASMSTART3847; GFX90A-NEXT:    ; def s[4:5]3848; GFX90A-NEXT:    ;;#ASMEND3849; GFX90A-NEXT:    s_lshr_b32 s8, s4, 163850; GFX90A-NEXT:    ;;#ASMSTART3851; GFX90A-NEXT:    ; use s83852; GFX90A-NEXT:    ;;#ASMEND3853; GFX90A-NEXT:    s_setpc_b64 s[30:31]3854;3855; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_u:3856; GFX942:       ; %bb.0:3857; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3858; GFX942-NEXT:    ;;#ASMSTART3859; GFX942-NEXT:    ; def s[0:1]3860; GFX942-NEXT:    ;;#ASMEND3861; GFX942-NEXT:    s_lshr_b32 s8, s0, 163862; GFX942-NEXT:    ;;#ASMSTART3863; GFX942-NEXT:    ; use s83864; GFX942-NEXT:    ;;#ASMEND3865; GFX942-NEXT:    s_setpc_b64 s[30:31]3866  %vec0 = call <4 x half> asm "; def $0", "=s"()3867  %vec1 = call <4 x half> asm "; def $0", "=s"()3868  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 poison>3869  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3870  ret void3871}3872 3873define void @s_shuffle_v2f16_v4f16__6_u() {3874; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_u:3875; GFX900:       ; %bb.0:3876; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3877; GFX900-NEXT:    ;;#ASMSTART3878; GFX900-NEXT:    ; def s[4:5]3879; GFX900-NEXT:    ;;#ASMEND3880; GFX900-NEXT:    s_mov_b32 s8, s53881; GFX900-NEXT:    ;;#ASMSTART3882; GFX900-NEXT:    ; use s83883; GFX900-NEXT:    ;;#ASMEND3884; GFX900-NEXT:    s_setpc_b64 s[30:31]3885;3886; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_u:3887; GFX90A:       ; %bb.0:3888; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3889; GFX90A-NEXT:    ;;#ASMSTART3890; GFX90A-NEXT:    ; def s[4:5]3891; GFX90A-NEXT:    ;;#ASMEND3892; GFX90A-NEXT:    s_mov_b32 s8, s53893; GFX90A-NEXT:    ;;#ASMSTART3894; GFX90A-NEXT:    ; use s83895; GFX90A-NEXT:    ;;#ASMEND3896; GFX90A-NEXT:    s_setpc_b64 s[30:31]3897;3898; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_u:3899; GFX942:       ; %bb.0:3900; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3901; GFX942-NEXT:    ;;#ASMSTART3902; GFX942-NEXT:    ; def s[0:1]3903; GFX942-NEXT:    ;;#ASMEND3904; GFX942-NEXT:    s_mov_b32 s8, s13905; GFX942-NEXT:    ;;#ASMSTART3906; GFX942-NEXT:    ; use s83907; GFX942-NEXT:    ;;#ASMEND3908; GFX942-NEXT:    s_setpc_b64 s[30:31]3909  %vec0 = call <4 x half> asm "; def $0", "=s"()3910  %vec1 = call <4 x half> asm "; def $0", "=s"()3911  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 poison>3912  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3913  ret void3914}3915 3916define void @s_shuffle_v2f16_v4f16__7_u() {3917; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_u:3918; GFX900:       ; %bb.0:3919; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3920; GFX900-NEXT:    ;;#ASMSTART3921; GFX900-NEXT:    ; def s[4:5]3922; GFX900-NEXT:    ;;#ASMEND3923; GFX900-NEXT:    s_lshr_b32 s8, s5, 163924; GFX900-NEXT:    ;;#ASMSTART3925; GFX900-NEXT:    ; use s83926; GFX900-NEXT:    ;;#ASMEND3927; GFX900-NEXT:    s_setpc_b64 s[30:31]3928;3929; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_u:3930; GFX90A:       ; %bb.0:3931; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3932; GFX90A-NEXT:    ;;#ASMSTART3933; GFX90A-NEXT:    ; def s[4:5]3934; GFX90A-NEXT:    ;;#ASMEND3935; GFX90A-NEXT:    s_lshr_b32 s8, s5, 163936; GFX90A-NEXT:    ;;#ASMSTART3937; GFX90A-NEXT:    ; use s83938; GFX90A-NEXT:    ;;#ASMEND3939; GFX90A-NEXT:    s_setpc_b64 s[30:31]3940;3941; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_u:3942; GFX942:       ; %bb.0:3943; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3944; GFX942-NEXT:    ;;#ASMSTART3945; GFX942-NEXT:    ; def s[0:1]3946; GFX942-NEXT:    ;;#ASMEND3947; GFX942-NEXT:    s_lshr_b32 s8, s1, 163948; GFX942-NEXT:    ;;#ASMSTART3949; GFX942-NEXT:    ; use s83950; GFX942-NEXT:    ;;#ASMEND3951; GFX942-NEXT:    s_setpc_b64 s[30:31]3952  %vec0 = call <4 x half> asm "; def $0", "=s"()3953  %vec1 = call <4 x half> asm "; def $0", "=s"()3954  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 poison>3955  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)3956  ret void3957}3958 3959define void @s_shuffle_v2f16_v4f16__7_0() {3960; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_0:3961; GFX900:       ; %bb.0:3962; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3963; GFX900-NEXT:    ;;#ASMSTART3964; GFX900-NEXT:    ; def s[4:5]3965; GFX900-NEXT:    ;;#ASMEND3966; GFX900-NEXT:    ;;#ASMSTART3967; GFX900-NEXT:    ; def s[6:7]3968; GFX900-NEXT:    ;;#ASMEND3969; GFX900-NEXT:    s_lshr_b32 s5, s7, 163970; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s43971; GFX900-NEXT:    ;;#ASMSTART3972; GFX900-NEXT:    ; use s83973; GFX900-NEXT:    ;;#ASMEND3974; GFX900-NEXT:    s_setpc_b64 s[30:31]3975;3976; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_0:3977; GFX90A:       ; %bb.0:3978; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3979; GFX90A-NEXT:    ;;#ASMSTART3980; GFX90A-NEXT:    ; def s[4:5]3981; GFX90A-NEXT:    ;;#ASMEND3982; GFX90A-NEXT:    ;;#ASMSTART3983; GFX90A-NEXT:    ; def s[6:7]3984; GFX90A-NEXT:    ;;#ASMEND3985; GFX90A-NEXT:    s_lshr_b32 s5, s7, 163986; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s43987; GFX90A-NEXT:    ;;#ASMSTART3988; GFX90A-NEXT:    ; use s83989; GFX90A-NEXT:    ;;#ASMEND3990; GFX90A-NEXT:    s_setpc_b64 s[30:31]3991;3992; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_0:3993; GFX942:       ; %bb.0:3994; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3995; GFX942-NEXT:    ;;#ASMSTART3996; GFX942-NEXT:    ; def s[0:1]3997; GFX942-NEXT:    ;;#ASMEND3998; GFX942-NEXT:    ;;#ASMSTART3999; GFX942-NEXT:    ; def s[2:3]4000; GFX942-NEXT:    ;;#ASMEND4001; GFX942-NEXT:    s_lshr_b32 s1, s3, 164002; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04003; GFX942-NEXT:    ;;#ASMSTART4004; GFX942-NEXT:    ; use s84005; GFX942-NEXT:    ;;#ASMEND4006; GFX942-NEXT:    s_setpc_b64 s[30:31]4007  %vec0 = call <4 x half> asm "; def $0", "=s"()4008  %vec1 = call <4 x half> asm "; def $0", "=s"()4009  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 0>4010  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4011  ret void4012}4013 4014define void @s_shuffle_v2f16_v4f16__7_1() {4015; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_1:4016; GFX900:       ; %bb.0:4017; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4018; GFX900-NEXT:    ;;#ASMSTART4019; GFX900-NEXT:    ; def s[4:5]4020; GFX900-NEXT:    ;;#ASMEND4021; GFX900-NEXT:    ;;#ASMSTART4022; GFX900-NEXT:    ; def s[6:7]4023; GFX900-NEXT:    ;;#ASMEND4024; GFX900-NEXT:    s_lshr_b32 s4, s4, 164025; GFX900-NEXT:    s_lshr_b32 s5, s7, 164026; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44027; GFX900-NEXT:    ;;#ASMSTART4028; GFX900-NEXT:    ; use s84029; GFX900-NEXT:    ;;#ASMEND4030; GFX900-NEXT:    s_setpc_b64 s[30:31]4031;4032; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_1:4033; GFX90A:       ; %bb.0:4034; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4035; GFX90A-NEXT:    ;;#ASMSTART4036; GFX90A-NEXT:    ; def s[4:5]4037; GFX90A-NEXT:    ;;#ASMEND4038; GFX90A-NEXT:    ;;#ASMSTART4039; GFX90A-NEXT:    ; def s[6:7]4040; GFX90A-NEXT:    ;;#ASMEND4041; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164042; GFX90A-NEXT:    s_lshr_b32 s5, s7, 164043; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44044; GFX90A-NEXT:    ;;#ASMSTART4045; GFX90A-NEXT:    ; use s84046; GFX90A-NEXT:    ;;#ASMEND4047; GFX90A-NEXT:    s_setpc_b64 s[30:31]4048;4049; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_1:4050; GFX942:       ; %bb.0:4051; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4052; GFX942-NEXT:    ;;#ASMSTART4053; GFX942-NEXT:    ; def s[0:1]4054; GFX942-NEXT:    ;;#ASMEND4055; GFX942-NEXT:    ;;#ASMSTART4056; GFX942-NEXT:    ; def s[2:3]4057; GFX942-NEXT:    ;;#ASMEND4058; GFX942-NEXT:    s_lshr_b32 s0, s0, 164059; GFX942-NEXT:    s_lshr_b32 s1, s3, 164060; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04061; GFX942-NEXT:    ;;#ASMSTART4062; GFX942-NEXT:    ; use s84063; GFX942-NEXT:    ;;#ASMEND4064; GFX942-NEXT:    s_setpc_b64 s[30:31]4065  %vec0 = call <4 x half> asm "; def $0", "=s"()4066  %vec1 = call <4 x half> asm "; def $0", "=s"()4067  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 1>4068  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4069  ret void4070}4071 4072define void @s_shuffle_v2f16_v4f16__7_2() {4073; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_2:4074; GFX900:       ; %bb.0:4075; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4076; GFX900-NEXT:    ;;#ASMSTART4077; GFX900-NEXT:    ; def s[4:5]4078; GFX900-NEXT:    ;;#ASMEND4079; GFX900-NEXT:    ;;#ASMSTART4080; GFX900-NEXT:    ; def s[6:7]4081; GFX900-NEXT:    ;;#ASMEND4082; GFX900-NEXT:    s_lshr_b32 s4, s7, 164083; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s54084; GFX900-NEXT:    ;;#ASMSTART4085; GFX900-NEXT:    ; use s84086; GFX900-NEXT:    ;;#ASMEND4087; GFX900-NEXT:    s_setpc_b64 s[30:31]4088;4089; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_2:4090; GFX90A:       ; %bb.0:4091; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4092; GFX90A-NEXT:    ;;#ASMSTART4093; GFX90A-NEXT:    ; def s[4:5]4094; GFX90A-NEXT:    ;;#ASMEND4095; GFX90A-NEXT:    ;;#ASMSTART4096; GFX90A-NEXT:    ; def s[6:7]4097; GFX90A-NEXT:    ;;#ASMEND4098; GFX90A-NEXT:    s_lshr_b32 s4, s7, 164099; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s54100; GFX90A-NEXT:    ;;#ASMSTART4101; GFX90A-NEXT:    ; use s84102; GFX90A-NEXT:    ;;#ASMEND4103; GFX90A-NEXT:    s_setpc_b64 s[30:31]4104;4105; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_2:4106; GFX942:       ; %bb.0:4107; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4108; GFX942-NEXT:    ;;#ASMSTART4109; GFX942-NEXT:    ; def s[0:1]4110; GFX942-NEXT:    ;;#ASMEND4111; GFX942-NEXT:    ;;#ASMSTART4112; GFX942-NEXT:    ; def s[2:3]4113; GFX942-NEXT:    ;;#ASMEND4114; GFX942-NEXT:    s_lshr_b32 s0, s3, 164115; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s14116; GFX942-NEXT:    ;;#ASMSTART4117; GFX942-NEXT:    ; use s84118; GFX942-NEXT:    ;;#ASMEND4119; GFX942-NEXT:    s_setpc_b64 s[30:31]4120  %vec0 = call <4 x half> asm "; def $0", "=s"()4121  %vec1 = call <4 x half> asm "; def $0", "=s"()4122  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 2>4123  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4124  ret void4125}4126 4127define void @s_shuffle_v2f16_v4f16__7_3() {4128; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_3:4129; GFX900:       ; %bb.0:4130; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4131; GFX900-NEXT:    ;;#ASMSTART4132; GFX900-NEXT:    ; def s[4:5]4133; GFX900-NEXT:    ;;#ASMEND4134; GFX900-NEXT:    ;;#ASMSTART4135; GFX900-NEXT:    ; def s[6:7]4136; GFX900-NEXT:    ;;#ASMEND4137; GFX900-NEXT:    s_lshr_b32 s4, s5, 164138; GFX900-NEXT:    s_lshr_b32 s5, s7, 164139; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44140; GFX900-NEXT:    ;;#ASMSTART4141; GFX900-NEXT:    ; use s84142; GFX900-NEXT:    ;;#ASMEND4143; GFX900-NEXT:    s_setpc_b64 s[30:31]4144;4145; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_3:4146; GFX90A:       ; %bb.0:4147; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4148; GFX90A-NEXT:    ;;#ASMSTART4149; GFX90A-NEXT:    ; def s[4:5]4150; GFX90A-NEXT:    ;;#ASMEND4151; GFX90A-NEXT:    ;;#ASMSTART4152; GFX90A-NEXT:    ; def s[6:7]4153; GFX90A-NEXT:    ;;#ASMEND4154; GFX90A-NEXT:    s_lshr_b32 s4, s5, 164155; GFX90A-NEXT:    s_lshr_b32 s5, s7, 164156; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44157; GFX90A-NEXT:    ;;#ASMSTART4158; GFX90A-NEXT:    ; use s84159; GFX90A-NEXT:    ;;#ASMEND4160; GFX90A-NEXT:    s_setpc_b64 s[30:31]4161;4162; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_3:4163; GFX942:       ; %bb.0:4164; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4165; GFX942-NEXT:    ;;#ASMSTART4166; GFX942-NEXT:    ; def s[0:1]4167; GFX942-NEXT:    ;;#ASMEND4168; GFX942-NEXT:    ;;#ASMSTART4169; GFX942-NEXT:    ; def s[2:3]4170; GFX942-NEXT:    ;;#ASMEND4171; GFX942-NEXT:    s_lshr_b32 s0, s1, 164172; GFX942-NEXT:    s_lshr_b32 s1, s3, 164173; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04174; GFX942-NEXT:    ;;#ASMSTART4175; GFX942-NEXT:    ; use s84176; GFX942-NEXT:    ;;#ASMEND4177; GFX942-NEXT:    s_setpc_b64 s[30:31]4178  %vec0 = call <4 x half> asm "; def $0", "=s"()4179  %vec1 = call <4 x half> asm "; def $0", "=s"()4180  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 3>4181  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4182  ret void4183}4184 4185define void @s_shuffle_v2f16_v4f16__7_4() {4186; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_4:4187; GFX900:       ; %bb.0:4188; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4189; GFX900-NEXT:    ;;#ASMSTART4190; GFX900-NEXT:    ; def s[4:5]4191; GFX900-NEXT:    ;;#ASMEND4192; GFX900-NEXT:    s_lshr_b32 s5, s5, 164193; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44194; GFX900-NEXT:    ;;#ASMSTART4195; GFX900-NEXT:    ; use s84196; GFX900-NEXT:    ;;#ASMEND4197; GFX900-NEXT:    s_setpc_b64 s[30:31]4198;4199; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_4:4200; GFX90A:       ; %bb.0:4201; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4202; GFX90A-NEXT:    ;;#ASMSTART4203; GFX90A-NEXT:    ; def s[4:5]4204; GFX90A-NEXT:    ;;#ASMEND4205; GFX90A-NEXT:    s_lshr_b32 s5, s5, 164206; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44207; GFX90A-NEXT:    ;;#ASMSTART4208; GFX90A-NEXT:    ; use s84209; GFX90A-NEXT:    ;;#ASMEND4210; GFX90A-NEXT:    s_setpc_b64 s[30:31]4211;4212; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_4:4213; GFX942:       ; %bb.0:4214; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4215; GFX942-NEXT:    ;;#ASMSTART4216; GFX942-NEXT:    ; def s[0:1]4217; GFX942-NEXT:    ;;#ASMEND4218; GFX942-NEXT:    s_lshr_b32 s1, s1, 164219; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04220; GFX942-NEXT:    ;;#ASMSTART4221; GFX942-NEXT:    ; use s84222; GFX942-NEXT:    ;;#ASMEND4223; GFX942-NEXT:    s_setpc_b64 s[30:31]4224  %vec0 = call <4 x half> asm "; def $0", "=s"()4225  %vec1 = call <4 x half> asm "; def $0", "=s"()4226  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 4>4227  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4228  ret void4229}4230 4231define void @s_shuffle_v2f16_v4f16__7_5() {4232; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_5:4233; GFX900:       ; %bb.0:4234; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4235; GFX900-NEXT:    ;;#ASMSTART4236; GFX900-NEXT:    ; def s[4:5]4237; GFX900-NEXT:    ;;#ASMEND4238; GFX900-NEXT:    s_lshr_b32 s4, s4, 164239; GFX900-NEXT:    s_lshr_b32 s5, s5, 164240; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44241; GFX900-NEXT:    ;;#ASMSTART4242; GFX900-NEXT:    ; use s84243; GFX900-NEXT:    ;;#ASMEND4244; GFX900-NEXT:    s_setpc_b64 s[30:31]4245;4246; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_5:4247; GFX90A:       ; %bb.0:4248; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4249; GFX90A-NEXT:    ;;#ASMSTART4250; GFX90A-NEXT:    ; def s[4:5]4251; GFX90A-NEXT:    ;;#ASMEND4252; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164253; GFX90A-NEXT:    s_lshr_b32 s5, s5, 164254; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44255; GFX90A-NEXT:    ;;#ASMSTART4256; GFX90A-NEXT:    ; use s84257; GFX90A-NEXT:    ;;#ASMEND4258; GFX90A-NEXT:    s_setpc_b64 s[30:31]4259;4260; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_5:4261; GFX942:       ; %bb.0:4262; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4263; GFX942-NEXT:    ;;#ASMSTART4264; GFX942-NEXT:    ; def s[0:1]4265; GFX942-NEXT:    ;;#ASMEND4266; GFX942-NEXT:    s_lshr_b32 s0, s0, 164267; GFX942-NEXT:    s_lshr_b32 s1, s1, 164268; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04269; GFX942-NEXT:    ;;#ASMSTART4270; GFX942-NEXT:    ; use s84271; GFX942-NEXT:    ;;#ASMEND4272; GFX942-NEXT:    s_setpc_b64 s[30:31]4273  %vec0 = call <4 x half> asm "; def $0", "=s"()4274  %vec1 = call <4 x half> asm "; def $0", "=s"()4275  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 5>4276  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4277  ret void4278}4279 4280define void @s_shuffle_v2f16_v4f16__7_6() {4281; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_6:4282; GFX900:       ; %bb.0:4283; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4284; GFX900-NEXT:    ;;#ASMSTART4285; GFX900-NEXT:    ; def s[4:5]4286; GFX900-NEXT:    ;;#ASMEND4287; GFX900-NEXT:    s_lshr_b32 s4, s5, 164288; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s54289; GFX900-NEXT:    ;;#ASMSTART4290; GFX900-NEXT:    ; use s84291; GFX900-NEXT:    ;;#ASMEND4292; GFX900-NEXT:    s_setpc_b64 s[30:31]4293;4294; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_6:4295; GFX90A:       ; %bb.0:4296; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4297; GFX90A-NEXT:    ;;#ASMSTART4298; GFX90A-NEXT:    ; def s[4:5]4299; GFX90A-NEXT:    ;;#ASMEND4300; GFX90A-NEXT:    s_lshr_b32 s4, s5, 164301; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s54302; GFX90A-NEXT:    ;;#ASMSTART4303; GFX90A-NEXT:    ; use s84304; GFX90A-NEXT:    ;;#ASMEND4305; GFX90A-NEXT:    s_setpc_b64 s[30:31]4306;4307; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_6:4308; GFX942:       ; %bb.0:4309; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4310; GFX942-NEXT:    ;;#ASMSTART4311; GFX942-NEXT:    ; def s[0:1]4312; GFX942-NEXT:    ;;#ASMEND4313; GFX942-NEXT:    s_lshr_b32 s0, s1, 164314; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s14315; GFX942-NEXT:    ;;#ASMSTART4316; GFX942-NEXT:    ; use s84317; GFX942-NEXT:    ;;#ASMEND4318; GFX942-NEXT:    s_setpc_b64 s[30:31]4319  %vec0 = call <4 x half> asm "; def $0", "=s"()4320  %vec1 = call <4 x half> asm "; def $0", "=s"()4321  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 6>4322  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4323  ret void4324}4325 4326define void @s_shuffle_v2f16_v4f16__7_7() {4327; GFX900-LABEL: s_shuffle_v2f16_v4f16__7_7:4328; GFX900:       ; %bb.0:4329; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4330; GFX900-NEXT:    ;;#ASMSTART4331; GFX900-NEXT:    ; def s[4:5]4332; GFX900-NEXT:    ;;#ASMEND4333; GFX900-NEXT:    s_lshr_b32 s4, s5, 164334; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s44335; GFX900-NEXT:    ;;#ASMSTART4336; GFX900-NEXT:    ; use s84337; GFX900-NEXT:    ;;#ASMEND4338; GFX900-NEXT:    s_setpc_b64 s[30:31]4339;4340; GFX90A-LABEL: s_shuffle_v2f16_v4f16__7_7:4341; GFX90A:       ; %bb.0:4342; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4343; GFX90A-NEXT:    ;;#ASMSTART4344; GFX90A-NEXT:    ; def s[4:5]4345; GFX90A-NEXT:    ;;#ASMEND4346; GFX90A-NEXT:    s_lshr_b32 s4, s5, 164347; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s44348; GFX90A-NEXT:    ;;#ASMSTART4349; GFX90A-NEXT:    ; use s84350; GFX90A-NEXT:    ;;#ASMEND4351; GFX90A-NEXT:    s_setpc_b64 s[30:31]4352;4353; GFX942-LABEL: s_shuffle_v2f16_v4f16__7_7:4354; GFX942:       ; %bb.0:4355; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4356; GFX942-NEXT:    ;;#ASMSTART4357; GFX942-NEXT:    ; def s[0:1]4358; GFX942-NEXT:    ;;#ASMEND4359; GFX942-NEXT:    s_lshr_b32 s0, s1, 164360; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s04361; GFX942-NEXT:    ;;#ASMSTART4362; GFX942-NEXT:    ; use s84363; GFX942-NEXT:    ;;#ASMEND4364; GFX942-NEXT:    s_setpc_b64 s[30:31]4365  %vec0 = call <4 x half> asm "; def $0", "=s"()4366  %vec1 = call <4 x half> asm "; def $0", "=s"()4367  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 7, i32 7>4368  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4369  ret void4370}4371 4372define void @s_shuffle_v2f16_v4f16__u_0() {4373; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_0:4374; GFX900:       ; %bb.0:4375; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4376; GFX900-NEXT:    ;;#ASMSTART4377; GFX900-NEXT:    ; def s[4:5]4378; GFX900-NEXT:    ;;#ASMEND4379; GFX900-NEXT:    s_lshl_b32 s8, s4, 164380; GFX900-NEXT:    ;;#ASMSTART4381; GFX900-NEXT:    ; use s84382; GFX900-NEXT:    ;;#ASMEND4383; GFX900-NEXT:    s_setpc_b64 s[30:31]4384;4385; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_0:4386; GFX90A:       ; %bb.0:4387; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4388; GFX90A-NEXT:    ;;#ASMSTART4389; GFX90A-NEXT:    ; def s[4:5]4390; GFX90A-NEXT:    ;;#ASMEND4391; GFX90A-NEXT:    s_lshl_b32 s8, s4, 164392; GFX90A-NEXT:    ;;#ASMSTART4393; GFX90A-NEXT:    ; use s84394; GFX90A-NEXT:    ;;#ASMEND4395; GFX90A-NEXT:    s_setpc_b64 s[30:31]4396;4397; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_0:4398; GFX942:       ; %bb.0:4399; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4400; GFX942-NEXT:    ;;#ASMSTART4401; GFX942-NEXT:    ; def s[0:1]4402; GFX942-NEXT:    ;;#ASMEND4403; GFX942-NEXT:    s_lshl_b32 s8, s0, 164404; GFX942-NEXT:    ;;#ASMSTART4405; GFX942-NEXT:    ; use s84406; GFX942-NEXT:    ;;#ASMEND4407; GFX942-NEXT:    s_setpc_b64 s[30:31]4408  %vec0 = call <4 x half> asm "; def $0", "=s"()4409  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 0>4410  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4411  ret void4412}4413 4414define void @s_shuffle_v2f16_v4f16__0_0() {4415; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_0:4416; GFX900:       ; %bb.0:4417; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4418; GFX900-NEXT:    ;;#ASMSTART4419; GFX900-NEXT:    ; def s[4:5]4420; GFX900-NEXT:    ;;#ASMEND4421; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s44422; GFX900-NEXT:    ;;#ASMSTART4423; GFX900-NEXT:    ; use s84424; GFX900-NEXT:    ;;#ASMEND4425; GFX900-NEXT:    s_setpc_b64 s[30:31]4426;4427; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_0:4428; GFX90A:       ; %bb.0:4429; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4430; GFX90A-NEXT:    ;;#ASMSTART4431; GFX90A-NEXT:    ; def s[4:5]4432; GFX90A-NEXT:    ;;#ASMEND4433; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s44434; GFX90A-NEXT:    ;;#ASMSTART4435; GFX90A-NEXT:    ; use s84436; GFX90A-NEXT:    ;;#ASMEND4437; GFX90A-NEXT:    s_setpc_b64 s[30:31]4438;4439; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_0:4440; GFX942:       ; %bb.0:4441; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4442; GFX942-NEXT:    ;;#ASMSTART4443; GFX942-NEXT:    ; def s[0:1]4444; GFX942-NEXT:    ;;#ASMEND4445; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s04446; GFX942-NEXT:    ;;#ASMSTART4447; GFX942-NEXT:    ; use s84448; GFX942-NEXT:    ;;#ASMEND4449; GFX942-NEXT:    s_setpc_b64 s[30:31]4450  %vec0 = call <4 x half> asm "; def $0", "=s"()4451  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> zeroinitializer4452  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4453  ret void4454}4455 4456define void @s_shuffle_v2f16_v4f16__1_0() {4457; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_0:4458; GFX900:       ; %bb.0:4459; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4460; GFX900-NEXT:    ;;#ASMSTART4461; GFX900-NEXT:    ; def s[4:5]4462; GFX900-NEXT:    ;;#ASMEND4463; GFX900-NEXT:    s_lshr_b32 s5, s4, 164464; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44465; GFX900-NEXT:    ;;#ASMSTART4466; GFX900-NEXT:    ; use s84467; GFX900-NEXT:    ;;#ASMEND4468; GFX900-NEXT:    s_setpc_b64 s[30:31]4469;4470; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_0:4471; GFX90A:       ; %bb.0:4472; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4473; GFX90A-NEXT:    ;;#ASMSTART4474; GFX90A-NEXT:    ; def s[4:5]4475; GFX90A-NEXT:    ;;#ASMEND4476; GFX90A-NEXT:    s_lshr_b32 s5, s4, 164477; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44478; GFX90A-NEXT:    ;;#ASMSTART4479; GFX90A-NEXT:    ; use s84480; GFX90A-NEXT:    ;;#ASMEND4481; GFX90A-NEXT:    s_setpc_b64 s[30:31]4482;4483; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_0:4484; GFX942:       ; %bb.0:4485; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4486; GFX942-NEXT:    ;;#ASMSTART4487; GFX942-NEXT:    ; def s[0:1]4488; GFX942-NEXT:    ;;#ASMEND4489; GFX942-NEXT:    s_lshr_b32 s1, s0, 164490; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04491; GFX942-NEXT:    ;;#ASMSTART4492; GFX942-NEXT:    ; use s84493; GFX942-NEXT:    ;;#ASMEND4494; GFX942-NEXT:    s_setpc_b64 s[30:31]4495  %vec0 = call <4 x half> asm "; def $0", "=s"()4496  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 0>4497  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4498  ret void4499}4500 4501define void @s_shuffle_v2f16_v4f16__2_0() {4502; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_0:4503; GFX900:       ; %bb.0:4504; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4505; GFX900-NEXT:    ;;#ASMSTART4506; GFX900-NEXT:    ; def s[4:5]4507; GFX900-NEXT:    ;;#ASMEND4508; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44509; GFX900-NEXT:    ;;#ASMSTART4510; GFX900-NEXT:    ; use s84511; GFX900-NEXT:    ;;#ASMEND4512; GFX900-NEXT:    s_setpc_b64 s[30:31]4513;4514; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_0:4515; GFX90A:       ; %bb.0:4516; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4517; GFX90A-NEXT:    ;;#ASMSTART4518; GFX90A-NEXT:    ; def s[4:5]4519; GFX90A-NEXT:    ;;#ASMEND4520; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44521; GFX90A-NEXT:    ;;#ASMSTART4522; GFX90A-NEXT:    ; use s84523; GFX90A-NEXT:    ;;#ASMEND4524; GFX90A-NEXT:    s_setpc_b64 s[30:31]4525;4526; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_0:4527; GFX942:       ; %bb.0:4528; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4529; GFX942-NEXT:    ;;#ASMSTART4530; GFX942-NEXT:    ; def s[0:1]4531; GFX942-NEXT:    ;;#ASMEND4532; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04533; GFX942-NEXT:    ;;#ASMSTART4534; GFX942-NEXT:    ; use s84535; GFX942-NEXT:    ;;#ASMEND4536; GFX942-NEXT:    s_setpc_b64 s[30:31]4537  %vec0 = call <4 x half> asm "; def $0", "=s"()4538  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 0>4539  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4540  ret void4541}4542 4543define void @s_shuffle_v2f16_v4f16__3_0() {4544; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_0:4545; GFX900:       ; %bb.0:4546; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4547; GFX900-NEXT:    ;;#ASMSTART4548; GFX900-NEXT:    ; def s[4:5]4549; GFX900-NEXT:    ;;#ASMEND4550; GFX900-NEXT:    s_lshr_b32 s5, s5, 164551; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44552; GFX900-NEXT:    ;;#ASMSTART4553; GFX900-NEXT:    ; use s84554; GFX900-NEXT:    ;;#ASMEND4555; GFX900-NEXT:    s_setpc_b64 s[30:31]4556;4557; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_0:4558; GFX90A:       ; %bb.0:4559; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4560; GFX90A-NEXT:    ;;#ASMSTART4561; GFX90A-NEXT:    ; def s[4:5]4562; GFX90A-NEXT:    ;;#ASMEND4563; GFX90A-NEXT:    s_lshr_b32 s5, s5, 164564; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44565; GFX90A-NEXT:    ;;#ASMSTART4566; GFX90A-NEXT:    ; use s84567; GFX90A-NEXT:    ;;#ASMEND4568; GFX90A-NEXT:    s_setpc_b64 s[30:31]4569;4570; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_0:4571; GFX942:       ; %bb.0:4572; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4573; GFX942-NEXT:    ;;#ASMSTART4574; GFX942-NEXT:    ; def s[0:1]4575; GFX942-NEXT:    ;;#ASMEND4576; GFX942-NEXT:    s_lshr_b32 s1, s1, 164577; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04578; GFX942-NEXT:    ;;#ASMSTART4579; GFX942-NEXT:    ; use s84580; GFX942-NEXT:    ;;#ASMEND4581; GFX942-NEXT:    s_setpc_b64 s[30:31]4582  %vec0 = call <4 x half> asm "; def $0", "=s"()4583  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 0>4584  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4585  ret void4586}4587 4588define void @s_shuffle_v2f16_v4f16__4_0() {4589; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_0:4590; GFX900:       ; %bb.0:4591; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4592; GFX900-NEXT:    ;;#ASMSTART4593; GFX900-NEXT:    ; def s[4:5]4594; GFX900-NEXT:    ;;#ASMEND4595; GFX900-NEXT:    s_lshl_b32 s8, s4, 164596; GFX900-NEXT:    ;;#ASMSTART4597; GFX900-NEXT:    ; use s84598; GFX900-NEXT:    ;;#ASMEND4599; GFX900-NEXT:    s_setpc_b64 s[30:31]4600;4601; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_0:4602; GFX90A:       ; %bb.0:4603; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4604; GFX90A-NEXT:    ;;#ASMSTART4605; GFX90A-NEXT:    ; def s[4:5]4606; GFX90A-NEXT:    ;;#ASMEND4607; GFX90A-NEXT:    s_lshl_b32 s8, s4, 164608; GFX90A-NEXT:    ;;#ASMSTART4609; GFX90A-NEXT:    ; use s84610; GFX90A-NEXT:    ;;#ASMEND4611; GFX90A-NEXT:    s_setpc_b64 s[30:31]4612;4613; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_0:4614; GFX942:       ; %bb.0:4615; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4616; GFX942-NEXT:    ;;#ASMSTART4617; GFX942-NEXT:    ; def s[0:1]4618; GFX942-NEXT:    ;;#ASMEND4619; GFX942-NEXT:    s_lshl_b32 s8, s0, 164620; GFX942-NEXT:    ;;#ASMSTART4621; GFX942-NEXT:    ; use s84622; GFX942-NEXT:    ;;#ASMEND4623; GFX942-NEXT:    s_setpc_b64 s[30:31]4624  %vec0 = call <4 x half> asm "; def $0", "=s"()4625  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 0>4626  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4627  ret void4628}4629 4630define void @s_shuffle_v2f16_v4f16__5_0() {4631; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_0:4632; GFX900:       ; %bb.0:4633; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4634; GFX900-NEXT:    ;;#ASMSTART4635; GFX900-NEXT:    ; def s[4:5]4636; GFX900-NEXT:    ;;#ASMEND4637; GFX900-NEXT:    ;;#ASMSTART4638; GFX900-NEXT:    ; def s[6:7]4639; GFX900-NEXT:    ;;#ASMEND4640; GFX900-NEXT:    s_lshr_b32 s5, s6, 164641; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44642; GFX900-NEXT:    ;;#ASMSTART4643; GFX900-NEXT:    ; use s84644; GFX900-NEXT:    ;;#ASMEND4645; GFX900-NEXT:    s_setpc_b64 s[30:31]4646;4647; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_0:4648; GFX90A:       ; %bb.0:4649; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4650; GFX90A-NEXT:    ;;#ASMSTART4651; GFX90A-NEXT:    ; def s[4:5]4652; GFX90A-NEXT:    ;;#ASMEND4653; GFX90A-NEXT:    ;;#ASMSTART4654; GFX90A-NEXT:    ; def s[6:7]4655; GFX90A-NEXT:    ;;#ASMEND4656; GFX90A-NEXT:    s_lshr_b32 s5, s6, 164657; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44658; GFX90A-NEXT:    ;;#ASMSTART4659; GFX90A-NEXT:    ; use s84660; GFX90A-NEXT:    ;;#ASMEND4661; GFX90A-NEXT:    s_setpc_b64 s[30:31]4662;4663; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_0:4664; GFX942:       ; %bb.0:4665; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4666; GFX942-NEXT:    ;;#ASMSTART4667; GFX942-NEXT:    ; def s[0:1]4668; GFX942-NEXT:    ;;#ASMEND4669; GFX942-NEXT:    ;;#ASMSTART4670; GFX942-NEXT:    ; def s[2:3]4671; GFX942-NEXT:    ;;#ASMEND4672; GFX942-NEXT:    s_lshr_b32 s1, s2, 164673; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04674; GFX942-NEXT:    ;;#ASMSTART4675; GFX942-NEXT:    ; use s84676; GFX942-NEXT:    ;;#ASMEND4677; GFX942-NEXT:    s_setpc_b64 s[30:31]4678  %vec0 = call <4 x half> asm "; def $0", "=s"()4679  %vec1 = call <4 x half> asm "; def $0", "=s"()4680  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 0>4681  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4682  ret void4683}4684 4685define void @s_shuffle_v2f16_v4f16__6_0() {4686; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_0:4687; GFX900:       ; %bb.0:4688; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4689; GFX900-NEXT:    ;;#ASMSTART4690; GFX900-NEXT:    ; def s[4:5]4691; GFX900-NEXT:    ;;#ASMEND4692; GFX900-NEXT:    ;;#ASMSTART4693; GFX900-NEXT:    ; def s[6:7]4694; GFX900-NEXT:    ;;#ASMEND4695; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s44696; GFX900-NEXT:    ;;#ASMSTART4697; GFX900-NEXT:    ; use s84698; GFX900-NEXT:    ;;#ASMEND4699; GFX900-NEXT:    s_setpc_b64 s[30:31]4700;4701; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_0:4702; GFX90A:       ; %bb.0:4703; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4704; GFX90A-NEXT:    ;;#ASMSTART4705; GFX90A-NEXT:    ; def s[4:5]4706; GFX90A-NEXT:    ;;#ASMEND4707; GFX90A-NEXT:    ;;#ASMSTART4708; GFX90A-NEXT:    ; def s[6:7]4709; GFX90A-NEXT:    ;;#ASMEND4710; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s44711; GFX90A-NEXT:    ;;#ASMSTART4712; GFX90A-NEXT:    ; use s84713; GFX90A-NEXT:    ;;#ASMEND4714; GFX90A-NEXT:    s_setpc_b64 s[30:31]4715;4716; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_0:4717; GFX942:       ; %bb.0:4718; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4719; GFX942-NEXT:    ;;#ASMSTART4720; GFX942-NEXT:    ; def s[0:1]4721; GFX942-NEXT:    ;;#ASMEND4722; GFX942-NEXT:    ;;#ASMSTART4723; GFX942-NEXT:    ; def s[2:3]4724; GFX942-NEXT:    ;;#ASMEND4725; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s04726; GFX942-NEXT:    ;;#ASMSTART4727; GFX942-NEXT:    ; use s84728; GFX942-NEXT:    ;;#ASMEND4729; GFX942-NEXT:    s_setpc_b64 s[30:31]4730  %vec0 = call <4 x half> asm "; def $0", "=s"()4731  %vec1 = call <4 x half> asm "; def $0", "=s"()4732  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 0>4733  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4734  ret void4735}4736 4737define void @s_shuffle_v2f16_v4f16__u_1() {4738; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_1:4739; GFX900:       ; %bb.0:4740; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4741; GFX900-NEXT:    ;;#ASMSTART4742; GFX900-NEXT:    ; def s[8:9]4743; GFX900-NEXT:    ;;#ASMEND4744; GFX900-NEXT:    ;;#ASMSTART4745; GFX900-NEXT:    ; use s84746; GFX900-NEXT:    ;;#ASMEND4747; GFX900-NEXT:    s_setpc_b64 s[30:31]4748;4749; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_1:4750; GFX90A:       ; %bb.0:4751; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4752; GFX90A-NEXT:    ;;#ASMSTART4753; GFX90A-NEXT:    ; def s[8:9]4754; GFX90A-NEXT:    ;;#ASMEND4755; GFX90A-NEXT:    ;;#ASMSTART4756; GFX90A-NEXT:    ; use s84757; GFX90A-NEXT:    ;;#ASMEND4758; GFX90A-NEXT:    s_setpc_b64 s[30:31]4759;4760; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_1:4761; GFX942:       ; %bb.0:4762; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4763; GFX942-NEXT:    ;;#ASMSTART4764; GFX942-NEXT:    ; def s[8:9]4765; GFX942-NEXT:    ;;#ASMEND4766; GFX942-NEXT:    s_nop 04767; GFX942-NEXT:    ;;#ASMSTART4768; GFX942-NEXT:    ; use s84769; GFX942-NEXT:    ;;#ASMEND4770; GFX942-NEXT:    s_setpc_b64 s[30:31]4771  %vec0 = call <4 x half> asm "; def $0", "=s"()4772  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 1>4773  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4774  ret void4775}4776 4777define void @s_shuffle_v2f16_v4f16__0_1() {4778; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_1:4779; GFX900:       ; %bb.0:4780; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4781; GFX900-NEXT:    ;;#ASMSTART4782; GFX900-NEXT:    ; def s[8:9]4783; GFX900-NEXT:    ;;#ASMEND4784; GFX900-NEXT:    ;;#ASMSTART4785; GFX900-NEXT:    ; use s84786; GFX900-NEXT:    ;;#ASMEND4787; GFX900-NEXT:    s_setpc_b64 s[30:31]4788;4789; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_1:4790; GFX90A:       ; %bb.0:4791; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4792; GFX90A-NEXT:    ;;#ASMSTART4793; GFX90A-NEXT:    ; def s[8:9]4794; GFX90A-NEXT:    ;;#ASMEND4795; GFX90A-NEXT:    ;;#ASMSTART4796; GFX90A-NEXT:    ; use s84797; GFX90A-NEXT:    ;;#ASMEND4798; GFX90A-NEXT:    s_setpc_b64 s[30:31]4799;4800; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_1:4801; GFX942:       ; %bb.0:4802; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4803; GFX942-NEXT:    ;;#ASMSTART4804; GFX942-NEXT:    ; def s[8:9]4805; GFX942-NEXT:    ;;#ASMEND4806; GFX942-NEXT:    s_nop 04807; GFX942-NEXT:    ;;#ASMSTART4808; GFX942-NEXT:    ; use s84809; GFX942-NEXT:    ;;#ASMEND4810; GFX942-NEXT:    s_setpc_b64 s[30:31]4811  %vec0 = call <4 x half> asm "; def $0", "=s"()4812  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 1>4813  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4814  ret void4815}4816 4817define void @s_shuffle_v2f16_v4f16__1_1() {4818; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_1: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_lshr_b32 s4, s4, 164825; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s44826; GFX900-NEXT:    ;;#ASMSTART4827; GFX900-NEXT:    ; use s84828; GFX900-NEXT:    ;;#ASMEND4829; GFX900-NEXT:    s_setpc_b64 s[30:31]4830;4831; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_1:4832; GFX90A:       ; %bb.0:4833; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4834; GFX90A-NEXT:    ;;#ASMSTART4835; GFX90A-NEXT:    ; def s[4:5]4836; GFX90A-NEXT:    ;;#ASMEND4837; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164838; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s44839; GFX90A-NEXT:    ;;#ASMSTART4840; GFX90A-NEXT:    ; use s84841; GFX90A-NEXT:    ;;#ASMEND4842; GFX90A-NEXT:    s_setpc_b64 s[30:31]4843;4844; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_1:4845; GFX942:       ; %bb.0:4846; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4847; GFX942-NEXT:    ;;#ASMSTART4848; GFX942-NEXT:    ; def s[0:1]4849; GFX942-NEXT:    ;;#ASMEND4850; GFX942-NEXT:    s_lshr_b32 s0, s0, 164851; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s04852; GFX942-NEXT:    ;;#ASMSTART4853; GFX942-NEXT:    ; use s84854; GFX942-NEXT:    ;;#ASMEND4855; GFX942-NEXT:    s_setpc_b64 s[30:31]4856  %vec0 = call <4 x half> asm "; def $0", "=s"()4857  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 1>4858  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4859  ret void4860}4861 4862define void @s_shuffle_v2f16_v4f16__2_1() {4863; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_1:4864; GFX900:       ; %bb.0:4865; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4866; GFX900-NEXT:    ;;#ASMSTART4867; GFX900-NEXT:    ; def s[4:5]4868; GFX900-NEXT:    ;;#ASMEND4869; GFX900-NEXT:    s_lshr_b32 s4, s4, 164870; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44871; GFX900-NEXT:    ;;#ASMSTART4872; GFX900-NEXT:    ; use s84873; GFX900-NEXT:    ;;#ASMEND4874; GFX900-NEXT:    s_setpc_b64 s[30:31]4875;4876; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_1:4877; GFX90A:       ; %bb.0:4878; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4879; GFX90A-NEXT:    ;;#ASMSTART4880; GFX90A-NEXT:    ; def s[4:5]4881; GFX90A-NEXT:    ;;#ASMEND4882; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164883; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44884; GFX90A-NEXT:    ;;#ASMSTART4885; GFX90A-NEXT:    ; use s84886; GFX90A-NEXT:    ;;#ASMEND4887; GFX90A-NEXT:    s_setpc_b64 s[30:31]4888;4889; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_1:4890; GFX942:       ; %bb.0:4891; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4892; GFX942-NEXT:    ;;#ASMSTART4893; GFX942-NEXT:    ; def s[0:1]4894; GFX942-NEXT:    ;;#ASMEND4895; GFX942-NEXT:    s_lshr_b32 s0, s0, 164896; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04897; GFX942-NEXT:    ;;#ASMSTART4898; GFX942-NEXT:    ; use s84899; GFX942-NEXT:    ;;#ASMEND4900; GFX942-NEXT:    s_setpc_b64 s[30:31]4901  %vec0 = call <4 x half> asm "; def $0", "=s"()4902  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 1>4903  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4904  ret void4905}4906 4907define void @s_shuffle_v2f16_v4f16__3_1() {4908; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_1:4909; GFX900:       ; %bb.0:4910; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4911; GFX900-NEXT:    ;;#ASMSTART4912; GFX900-NEXT:    ; def s[4:5]4913; GFX900-NEXT:    ;;#ASMEND4914; GFX900-NEXT:    s_lshr_b32 s4, s4, 164915; GFX900-NEXT:    s_lshr_b32 s5, s5, 164916; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s44917; GFX900-NEXT:    ;;#ASMSTART4918; GFX900-NEXT:    ; use s84919; GFX900-NEXT:    ;;#ASMEND4920; GFX900-NEXT:    s_setpc_b64 s[30:31]4921;4922; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_1:4923; GFX90A:       ; %bb.0:4924; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4925; GFX90A-NEXT:    ;;#ASMSTART4926; GFX90A-NEXT:    ; def s[4:5]4927; GFX90A-NEXT:    ;;#ASMEND4928; GFX90A-NEXT:    s_lshr_b32 s4, s4, 164929; GFX90A-NEXT:    s_lshr_b32 s5, s5, 164930; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s44931; GFX90A-NEXT:    ;;#ASMSTART4932; GFX90A-NEXT:    ; use s84933; GFX90A-NEXT:    ;;#ASMEND4934; GFX90A-NEXT:    s_setpc_b64 s[30:31]4935;4936; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_1:4937; GFX942:       ; %bb.0:4938; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4939; GFX942-NEXT:    ;;#ASMSTART4940; GFX942-NEXT:    ; def s[0:1]4941; GFX942-NEXT:    ;;#ASMEND4942; GFX942-NEXT:    s_lshr_b32 s0, s0, 164943; GFX942-NEXT:    s_lshr_b32 s1, s1, 164944; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s04945; GFX942-NEXT:    ;;#ASMSTART4946; GFX942-NEXT:    ; use s84947; GFX942-NEXT:    ;;#ASMEND4948; GFX942-NEXT:    s_setpc_b64 s[30:31]4949  %vec0 = call <4 x half> asm "; def $0", "=s"()4950  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 1>4951  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4952  ret void4953}4954 4955define void @s_shuffle_v2f16_v4f16__4_1() {4956; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_1:4957; GFX900:       ; %bb.0:4958; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4959; GFX900-NEXT:    ;;#ASMSTART4960; GFX900-NEXT:    ; def s[8:9]4961; GFX900-NEXT:    ;;#ASMEND4962; GFX900-NEXT:    ;;#ASMSTART4963; GFX900-NEXT:    ; use s84964; GFX900-NEXT:    ;;#ASMEND4965; GFX900-NEXT:    s_setpc_b64 s[30:31]4966;4967; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_1:4968; GFX90A:       ; %bb.0:4969; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4970; GFX90A-NEXT:    ;;#ASMSTART4971; GFX90A-NEXT:    ; def s[8:9]4972; GFX90A-NEXT:    ;;#ASMEND4973; GFX90A-NEXT:    ;;#ASMSTART4974; GFX90A-NEXT:    ; use s84975; GFX90A-NEXT:    ;;#ASMEND4976; GFX90A-NEXT:    s_setpc_b64 s[30:31]4977;4978; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_1:4979; GFX942:       ; %bb.0:4980; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4981; GFX942-NEXT:    ;;#ASMSTART4982; GFX942-NEXT:    ; def s[8:9]4983; GFX942-NEXT:    ;;#ASMEND4984; GFX942-NEXT:    s_nop 04985; GFX942-NEXT:    ;;#ASMSTART4986; GFX942-NEXT:    ; use s84987; GFX942-NEXT:    ;;#ASMEND4988; GFX942-NEXT:    s_setpc_b64 s[30:31]4989  %vec0 = call <4 x half> asm "; def $0", "=s"()4990  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 1>4991  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)4992  ret void4993}4994 4995define void @s_shuffle_v2f16_v4f16__5_1() {4996; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_1:4997; GFX900:       ; %bb.0:4998; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4999; GFX900-NEXT:    ;;#ASMSTART5000; GFX900-NEXT:    ; def s[4:5]5001; GFX900-NEXT:    ;;#ASMEND5002; GFX900-NEXT:    ;;#ASMSTART5003; GFX900-NEXT:    ; def s[6:7]5004; GFX900-NEXT:    ;;#ASMEND5005; GFX900-NEXT:    s_lshr_b32 s4, s4, 165006; GFX900-NEXT:    s_lshr_b32 s5, s6, 165007; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45008; GFX900-NEXT:    ;;#ASMSTART5009; GFX900-NEXT:    ; use s85010; GFX900-NEXT:    ;;#ASMEND5011; GFX900-NEXT:    s_setpc_b64 s[30:31]5012;5013; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_1:5014; GFX90A:       ; %bb.0:5015; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5016; GFX90A-NEXT:    ;;#ASMSTART5017; GFX90A-NEXT:    ; def s[4:5]5018; GFX90A-NEXT:    ;;#ASMEND5019; GFX90A-NEXT:    ;;#ASMSTART5020; GFX90A-NEXT:    ; def s[6:7]5021; GFX90A-NEXT:    ;;#ASMEND5022; GFX90A-NEXT:    s_lshr_b32 s4, s4, 165023; GFX90A-NEXT:    s_lshr_b32 s5, s6, 165024; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45025; GFX90A-NEXT:    ;;#ASMSTART5026; GFX90A-NEXT:    ; use s85027; GFX90A-NEXT:    ;;#ASMEND5028; GFX90A-NEXT:    s_setpc_b64 s[30:31]5029;5030; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_1:5031; GFX942:       ; %bb.0:5032; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5033; GFX942-NEXT:    ;;#ASMSTART5034; GFX942-NEXT:    ; def s[0:1]5035; GFX942-NEXT:    ;;#ASMEND5036; GFX942-NEXT:    ;;#ASMSTART5037; GFX942-NEXT:    ; def s[2:3]5038; GFX942-NEXT:    ;;#ASMEND5039; GFX942-NEXT:    s_lshr_b32 s0, s0, 165040; GFX942-NEXT:    s_lshr_b32 s1, s2, 165041; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05042; GFX942-NEXT:    ;;#ASMSTART5043; GFX942-NEXT:    ; use s85044; GFX942-NEXT:    ;;#ASMEND5045; GFX942-NEXT:    s_setpc_b64 s[30:31]5046  %vec0 = call <4 x half> asm "; def $0", "=s"()5047  %vec1 = call <4 x half> asm "; def $0", "=s"()5048  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 1>5049  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5050  ret void5051}5052 5053define void @s_shuffle_v2f16_v4f16__6_1() {5054; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_1:5055; GFX900:       ; %bb.0:5056; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5057; GFX900-NEXT:    ;;#ASMSTART5058; GFX900-NEXT:    ; def s[4:5]5059; GFX900-NEXT:    ;;#ASMEND5060; GFX900-NEXT:    s_lshr_b32 s4, s4, 165061; GFX900-NEXT:    ;;#ASMSTART5062; GFX900-NEXT:    ; def s[6:7]5063; GFX900-NEXT:    ;;#ASMEND5064; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s45065; GFX900-NEXT:    ;;#ASMSTART5066; GFX900-NEXT:    ; use s85067; GFX900-NEXT:    ;;#ASMEND5068; GFX900-NEXT:    s_setpc_b64 s[30:31]5069;5070; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_1:5071; GFX90A:       ; %bb.0:5072; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5073; GFX90A-NEXT:    ;;#ASMSTART5074; GFX90A-NEXT:    ; def s[4:5]5075; GFX90A-NEXT:    ;;#ASMEND5076; GFX90A-NEXT:    s_lshr_b32 s4, s4, 165077; GFX90A-NEXT:    ;;#ASMSTART5078; GFX90A-NEXT:    ; def s[6:7]5079; GFX90A-NEXT:    ;;#ASMEND5080; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s45081; GFX90A-NEXT:    ;;#ASMSTART5082; GFX90A-NEXT:    ; use s85083; GFX90A-NEXT:    ;;#ASMEND5084; GFX90A-NEXT:    s_setpc_b64 s[30:31]5085;5086; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_1:5087; GFX942:       ; %bb.0:5088; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5089; GFX942-NEXT:    ;;#ASMSTART5090; GFX942-NEXT:    ; def s[0:1]5091; GFX942-NEXT:    ;;#ASMEND5092; GFX942-NEXT:    s_lshr_b32 s0, s0, 165093; GFX942-NEXT:    ;;#ASMSTART5094; GFX942-NEXT:    ; def s[2:3]5095; GFX942-NEXT:    ;;#ASMEND5096; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s05097; GFX942-NEXT:    ;;#ASMSTART5098; GFX942-NEXT:    ; use s85099; GFX942-NEXT:    ;;#ASMEND5100; GFX942-NEXT:    s_setpc_b64 s[30:31]5101  %vec0 = call <4 x half> asm "; def $0", "=s"()5102  %vec1 = call <4 x half> asm "; def $0", "=s"()5103  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 1>5104  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5105  ret void5106}5107 5108define void @s_shuffle_v2f16_v4f16__u_2() {5109; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_2:5110; GFX900:       ; %bb.0:5111; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5112; GFX900-NEXT:    ;;#ASMSTART5113; GFX900-NEXT:    ; def s[4:5]5114; GFX900-NEXT:    ;;#ASMEND5115; GFX900-NEXT:    s_lshl_b32 s8, s5, 165116; GFX900-NEXT:    ;;#ASMSTART5117; GFX900-NEXT:    ; use s85118; GFX900-NEXT:    ;;#ASMEND5119; GFX900-NEXT:    s_setpc_b64 s[30:31]5120;5121; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_2:5122; GFX90A:       ; %bb.0:5123; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5124; GFX90A-NEXT:    ;;#ASMSTART5125; GFX90A-NEXT:    ; def s[4:5]5126; GFX90A-NEXT:    ;;#ASMEND5127; GFX90A-NEXT:    s_lshl_b32 s8, s5, 165128; GFX90A-NEXT:    ;;#ASMSTART5129; GFX90A-NEXT:    ; use s85130; GFX90A-NEXT:    ;;#ASMEND5131; GFX90A-NEXT:    s_setpc_b64 s[30:31]5132;5133; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_2:5134; GFX942:       ; %bb.0:5135; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5136; GFX942-NEXT:    ;;#ASMSTART5137; GFX942-NEXT:    ; def s[0:1]5138; GFX942-NEXT:    ;;#ASMEND5139; GFX942-NEXT:    s_lshl_b32 s8, s1, 165140; GFX942-NEXT:    ;;#ASMSTART5141; GFX942-NEXT:    ; use s85142; GFX942-NEXT:    ;;#ASMEND5143; GFX942-NEXT:    s_setpc_b64 s[30:31]5144  %vec0 = call <4 x half> asm "; def $0", "=s"()5145  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 2>5146  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5147  ret void5148}5149 5150define void @s_shuffle_v2f16_v4f16__0_2() {5151; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_2:5152; GFX900:       ; %bb.0:5153; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5154; GFX900-NEXT:    ;;#ASMSTART5155; GFX900-NEXT:    ; def s[4:5]5156; GFX900-NEXT:    ;;#ASMEND5157; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55158; GFX900-NEXT:    ;;#ASMSTART5159; GFX900-NEXT:    ; use s85160; GFX900-NEXT:    ;;#ASMEND5161; GFX900-NEXT:    s_setpc_b64 s[30:31]5162;5163; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_2:5164; GFX90A:       ; %bb.0:5165; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5166; GFX90A-NEXT:    ;;#ASMSTART5167; GFX90A-NEXT:    ; def s[4:5]5168; GFX90A-NEXT:    ;;#ASMEND5169; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55170; GFX90A-NEXT:    ;;#ASMSTART5171; GFX90A-NEXT:    ; use s85172; GFX90A-NEXT:    ;;#ASMEND5173; GFX90A-NEXT:    s_setpc_b64 s[30:31]5174;5175; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_2:5176; GFX942:       ; %bb.0:5177; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5178; GFX942-NEXT:    ;;#ASMSTART5179; GFX942-NEXT:    ; def s[0:1]5180; GFX942-NEXT:    ;;#ASMEND5181; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15182; GFX942-NEXT:    ;;#ASMSTART5183; GFX942-NEXT:    ; use s85184; GFX942-NEXT:    ;;#ASMEND5185; GFX942-NEXT:    s_setpc_b64 s[30:31]5186  %vec0 = call <4 x half> asm "; def $0", "=s"()5187  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 2>5188  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5189  ret void5190}5191 5192define void @s_shuffle_v2f16_v4f16__1_2() {5193; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_2:5194; GFX900:       ; %bb.0:5195; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5196; GFX900-NEXT:    ;;#ASMSTART5197; GFX900-NEXT:    ; def s[4:5]5198; GFX900-NEXT:    ;;#ASMEND5199; GFX900-NEXT:    s_lshr_b32 s4, s4, 165200; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55201; GFX900-NEXT:    ;;#ASMSTART5202; GFX900-NEXT:    ; use s85203; GFX900-NEXT:    ;;#ASMEND5204; GFX900-NEXT:    s_setpc_b64 s[30:31]5205;5206; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_2:5207; GFX90A:       ; %bb.0:5208; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5209; GFX90A-NEXT:    ;;#ASMSTART5210; GFX90A-NEXT:    ; def s[4:5]5211; GFX90A-NEXT:    ;;#ASMEND5212; GFX90A-NEXT:    s_lshr_b32 s4, s4, 165213; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55214; GFX90A-NEXT:    ;;#ASMSTART5215; GFX90A-NEXT:    ; use s85216; GFX90A-NEXT:    ;;#ASMEND5217; GFX90A-NEXT:    s_setpc_b64 s[30:31]5218;5219; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_2:5220; GFX942:       ; %bb.0:5221; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5222; GFX942-NEXT:    ;;#ASMSTART5223; GFX942-NEXT:    ; def s[0:1]5224; GFX942-NEXT:    ;;#ASMEND5225; GFX942-NEXT:    s_lshr_b32 s0, s0, 165226; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15227; GFX942-NEXT:    ;;#ASMSTART5228; GFX942-NEXT:    ; use s85229; GFX942-NEXT:    ;;#ASMEND5230; GFX942-NEXT:    s_setpc_b64 s[30:31]5231  %vec0 = call <4 x half> asm "; def $0", "=s"()5232  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 2>5233  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5234  ret void5235}5236 5237define void @s_shuffle_v2f16_v4f16__2_2() {5238; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_2:5239; GFX900:       ; %bb.0:5240; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5241; GFX900-NEXT:    ;;#ASMSTART5242; GFX900-NEXT:    ; def s[4:5]5243; GFX900-NEXT:    ;;#ASMEND5244; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s55245; GFX900-NEXT:    ;;#ASMSTART5246; GFX900-NEXT:    ; use s85247; GFX900-NEXT:    ;;#ASMEND5248; GFX900-NEXT:    s_setpc_b64 s[30:31]5249;5250; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_2:5251; GFX90A:       ; %bb.0:5252; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5253; GFX90A-NEXT:    ;;#ASMSTART5254; GFX90A-NEXT:    ; def s[4:5]5255; GFX90A-NEXT:    ;;#ASMEND5256; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s55257; GFX90A-NEXT:    ;;#ASMSTART5258; GFX90A-NEXT:    ; use s85259; GFX90A-NEXT:    ;;#ASMEND5260; GFX90A-NEXT:    s_setpc_b64 s[30:31]5261;5262; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_2:5263; GFX942:       ; %bb.0:5264; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5265; GFX942-NEXT:    ;;#ASMSTART5266; GFX942-NEXT:    ; def s[0:1]5267; GFX942-NEXT:    ;;#ASMEND5268; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s15269; GFX942-NEXT:    ;;#ASMSTART5270; GFX942-NEXT:    ; use s85271; GFX942-NEXT:    ;;#ASMEND5272; GFX942-NEXT:    s_setpc_b64 s[30:31]5273  %vec0 = call <4 x half> asm "; def $0", "=s"()5274  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 2>5275  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5276  ret void5277}5278 5279define void @s_shuffle_v2f16_v4f16__3_2() {5280; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_2:5281; GFX900:       ; %bb.0:5282; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5283; GFX900-NEXT:    ;;#ASMSTART5284; GFX900-NEXT:    ; def s[4:5]5285; GFX900-NEXT:    ;;#ASMEND5286; GFX900-NEXT:    s_lshr_b32 s4, s5, 165287; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55288; GFX900-NEXT:    ;;#ASMSTART5289; GFX900-NEXT:    ; use s85290; GFX900-NEXT:    ;;#ASMEND5291; GFX900-NEXT:    s_setpc_b64 s[30:31]5292;5293; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_2:5294; GFX90A:       ; %bb.0:5295; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5296; GFX90A-NEXT:    ;;#ASMSTART5297; GFX90A-NEXT:    ; def s[4:5]5298; GFX90A-NEXT:    ;;#ASMEND5299; GFX90A-NEXT:    s_lshr_b32 s4, s5, 165300; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55301; GFX90A-NEXT:    ;;#ASMSTART5302; GFX90A-NEXT:    ; use s85303; GFX90A-NEXT:    ;;#ASMEND5304; GFX90A-NEXT:    s_setpc_b64 s[30:31]5305;5306; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_2:5307; GFX942:       ; %bb.0:5308; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5309; GFX942-NEXT:    ;;#ASMSTART5310; GFX942-NEXT:    ; def s[0:1]5311; GFX942-NEXT:    ;;#ASMEND5312; GFX942-NEXT:    s_lshr_b32 s0, s1, 165313; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15314; GFX942-NEXT:    ;;#ASMSTART5315; GFX942-NEXT:    ; use s85316; GFX942-NEXT:    ;;#ASMEND5317; GFX942-NEXT:    s_setpc_b64 s[30:31]5318  %vec0 = call <4 x half> asm "; def $0", "=s"()5319  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 2>5320  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5321  ret void5322}5323 5324define void @s_shuffle_v2f16_v4f16__4_2() {5325; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_2:5326; GFX900:       ; %bb.0:5327; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5328; GFX900-NEXT:    ;;#ASMSTART5329; GFX900-NEXT:    ; def s[4:5]5330; GFX900-NEXT:    ;;#ASMEND5331; GFX900-NEXT:    s_lshl_b32 s8, s5, 165332; GFX900-NEXT:    ;;#ASMSTART5333; GFX900-NEXT:    ; use s85334; GFX900-NEXT:    ;;#ASMEND5335; GFX900-NEXT:    s_setpc_b64 s[30:31]5336;5337; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_2:5338; GFX90A:       ; %bb.0:5339; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5340; GFX90A-NEXT:    ;;#ASMSTART5341; GFX90A-NEXT:    ; def s[4:5]5342; GFX90A-NEXT:    ;;#ASMEND5343; GFX90A-NEXT:    s_lshl_b32 s8, s5, 165344; GFX90A-NEXT:    ;;#ASMSTART5345; GFX90A-NEXT:    ; use s85346; GFX90A-NEXT:    ;;#ASMEND5347; GFX90A-NEXT:    s_setpc_b64 s[30:31]5348;5349; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_2:5350; GFX942:       ; %bb.0:5351; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5352; GFX942-NEXT:    ;;#ASMSTART5353; GFX942-NEXT:    ; def s[0:1]5354; GFX942-NEXT:    ;;#ASMEND5355; GFX942-NEXT:    s_lshl_b32 s8, s1, 165356; GFX942-NEXT:    ;;#ASMSTART5357; GFX942-NEXT:    ; use s85358; GFX942-NEXT:    ;;#ASMEND5359; GFX942-NEXT:    s_setpc_b64 s[30:31]5360  %vec0 = call <4 x half> asm "; def $0", "=s"()5361  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 2>5362  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5363  ret void5364}5365 5366define void @s_shuffle_v2f16_v4f16__5_2() {5367; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_2:5368; GFX900:       ; %bb.0:5369; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5370; GFX900-NEXT:    ;;#ASMSTART5371; GFX900-NEXT:    ; def s[4:5]5372; GFX900-NEXT:    ;;#ASMEND5373; GFX900-NEXT:    ;;#ASMSTART5374; GFX900-NEXT:    ; def s[6:7]5375; GFX900-NEXT:    ;;#ASMEND5376; GFX900-NEXT:    s_lshr_b32 s4, s6, 165377; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55378; GFX900-NEXT:    ;;#ASMSTART5379; GFX900-NEXT:    ; use s85380; GFX900-NEXT:    ;;#ASMEND5381; GFX900-NEXT:    s_setpc_b64 s[30:31]5382;5383; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_2:5384; GFX90A:       ; %bb.0:5385; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5386; GFX90A-NEXT:    ;;#ASMSTART5387; GFX90A-NEXT:    ; def s[4:5]5388; GFX90A-NEXT:    ;;#ASMEND5389; GFX90A-NEXT:    ;;#ASMSTART5390; GFX90A-NEXT:    ; def s[6:7]5391; GFX90A-NEXT:    ;;#ASMEND5392; GFX90A-NEXT:    s_lshr_b32 s4, s6, 165393; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55394; GFX90A-NEXT:    ;;#ASMSTART5395; GFX90A-NEXT:    ; use s85396; GFX90A-NEXT:    ;;#ASMEND5397; GFX90A-NEXT:    s_setpc_b64 s[30:31]5398;5399; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_2:5400; GFX942:       ; %bb.0:5401; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5402; GFX942-NEXT:    ;;#ASMSTART5403; GFX942-NEXT:    ; def s[0:1]5404; GFX942-NEXT:    ;;#ASMEND5405; GFX942-NEXT:    ;;#ASMSTART5406; GFX942-NEXT:    ; def s[2:3]5407; GFX942-NEXT:    ;;#ASMEND5408; GFX942-NEXT:    s_lshr_b32 s0, s2, 165409; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15410; GFX942-NEXT:    ;;#ASMSTART5411; GFX942-NEXT:    ; use s85412; GFX942-NEXT:    ;;#ASMEND5413; GFX942-NEXT:    s_setpc_b64 s[30:31]5414  %vec0 = call <4 x half> asm "; def $0", "=s"()5415  %vec1 = call <4 x half> asm "; def $0", "=s"()5416  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 2>5417  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5418  ret void5419}5420 5421define void @s_shuffle_v2f16_v4f16__6_2() {5422; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_2:5423; GFX900:       ; %bb.0:5424; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5425; GFX900-NEXT:    ;;#ASMSTART5426; GFX900-NEXT:    ; def s[4:5]5427; GFX900-NEXT:    ;;#ASMEND5428; GFX900-NEXT:    ;;#ASMSTART5429; GFX900-NEXT:    ; def s[6:7]5430; GFX900-NEXT:    ;;#ASMEND5431; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s55432; GFX900-NEXT:    ;;#ASMSTART5433; GFX900-NEXT:    ; use s85434; GFX900-NEXT:    ;;#ASMEND5435; GFX900-NEXT:    s_setpc_b64 s[30:31]5436;5437; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_2:5438; GFX90A:       ; %bb.0:5439; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5440; GFX90A-NEXT:    ;;#ASMSTART5441; GFX90A-NEXT:    ; def s[4:5]5442; GFX90A-NEXT:    ;;#ASMEND5443; GFX90A-NEXT:    ;;#ASMSTART5444; GFX90A-NEXT:    ; def s[6:7]5445; GFX90A-NEXT:    ;;#ASMEND5446; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s55447; GFX90A-NEXT:    ;;#ASMSTART5448; GFX90A-NEXT:    ; use s85449; GFX90A-NEXT:    ;;#ASMEND5450; GFX90A-NEXT:    s_setpc_b64 s[30:31]5451;5452; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_2:5453; GFX942:       ; %bb.0:5454; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5455; GFX942-NEXT:    ;;#ASMSTART5456; GFX942-NEXT:    ; def s[0:1]5457; GFX942-NEXT:    ;;#ASMEND5458; GFX942-NEXT:    ;;#ASMSTART5459; GFX942-NEXT:    ; def s[2:3]5460; GFX942-NEXT:    ;;#ASMEND5461; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s15462; GFX942-NEXT:    ;;#ASMSTART5463; GFX942-NEXT:    ; use s85464; GFX942-NEXT:    ;;#ASMEND5465; GFX942-NEXT:    s_setpc_b64 s[30:31]5466  %vec0 = call <4 x half> asm "; def $0", "=s"()5467  %vec1 = call <4 x half> asm "; def $0", "=s"()5468  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 2>5469  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5470  ret void5471}5472 5473define void @s_shuffle_v2f16_v4f16__u_3() {5474; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_3:5475; GFX900:       ; %bb.0:5476; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5477; GFX900-NEXT:    ;;#ASMSTART5478; GFX900-NEXT:    ; def s[4:5]5479; GFX900-NEXT:    ;;#ASMEND5480; GFX900-NEXT:    s_mov_b32 s8, s55481; GFX900-NEXT:    ;;#ASMSTART5482; GFX900-NEXT:    ; use s85483; GFX900-NEXT:    ;;#ASMEND5484; GFX900-NEXT:    s_setpc_b64 s[30:31]5485;5486; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_3:5487; GFX90A:       ; %bb.0:5488; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5489; GFX90A-NEXT:    ;;#ASMSTART5490; GFX90A-NEXT:    ; def s[4:5]5491; GFX90A-NEXT:    ;;#ASMEND5492; GFX90A-NEXT:    s_mov_b32 s8, s55493; GFX90A-NEXT:    ;;#ASMSTART5494; GFX90A-NEXT:    ; use s85495; GFX90A-NEXT:    ;;#ASMEND5496; GFX90A-NEXT:    s_setpc_b64 s[30:31]5497;5498; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_3:5499; GFX942:       ; %bb.0:5500; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5501; GFX942-NEXT:    ;;#ASMSTART5502; GFX942-NEXT:    ; def s[0:1]5503; GFX942-NEXT:    ;;#ASMEND5504; GFX942-NEXT:    s_mov_b32 s8, s15505; GFX942-NEXT:    ;;#ASMSTART5506; GFX942-NEXT:    ; use s85507; GFX942-NEXT:    ;;#ASMEND5508; GFX942-NEXT:    s_setpc_b64 s[30:31]5509  %vec0 = call <4 x half> asm "; def $0", "=s"()5510  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 3>5511  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5512  ret void5513}5514 5515define void @s_shuffle_v2f16_v4f16__0_3() {5516; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_3:5517; GFX900:       ; %bb.0:5518; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5519; GFX900-NEXT:    ;;#ASMSTART5520; GFX900-NEXT:    ; def s[4:5]5521; GFX900-NEXT:    ;;#ASMEND5522; GFX900-NEXT:    s_lshr_b32 s5, s5, 165523; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55524; GFX900-NEXT:    ;;#ASMSTART5525; GFX900-NEXT:    ; use s85526; GFX900-NEXT:    ;;#ASMEND5527; GFX900-NEXT:    s_setpc_b64 s[30:31]5528;5529; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_3:5530; GFX90A:       ; %bb.0:5531; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5532; GFX90A-NEXT:    ;;#ASMSTART5533; GFX90A-NEXT:    ; def s[4:5]5534; GFX90A-NEXT:    ;;#ASMEND5535; GFX90A-NEXT:    s_lshr_b32 s5, s5, 165536; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55537; GFX90A-NEXT:    ;;#ASMSTART5538; GFX90A-NEXT:    ; use s85539; GFX90A-NEXT:    ;;#ASMEND5540; GFX90A-NEXT:    s_setpc_b64 s[30:31]5541;5542; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_3:5543; GFX942:       ; %bb.0:5544; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5545; GFX942-NEXT:    ;;#ASMSTART5546; GFX942-NEXT:    ; def s[0:1]5547; GFX942-NEXT:    ;;#ASMEND5548; GFX942-NEXT:    s_lshr_b32 s1, s1, 165549; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15550; GFX942-NEXT:    ;;#ASMSTART5551; GFX942-NEXT:    ; use s85552; GFX942-NEXT:    ;;#ASMEND5553; GFX942-NEXT:    s_setpc_b64 s[30:31]5554  %vec0 = call <4 x half> asm "; def $0", "=s"()5555  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 3>5556  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5557  ret void5558}5559 5560define void @s_shuffle_v2f16_v4f16__1_3() {5561; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_3:5562; GFX900:       ; %bb.0:5563; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5564; GFX900-NEXT:    ;;#ASMSTART5565; GFX900-NEXT:    ; def s[4:5]5566; GFX900-NEXT:    ;;#ASMEND5567; GFX900-NEXT:    s_lshr_b32 s5, s5, 165568; GFX900-NEXT:    s_lshr_b32 s4, s4, 165569; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s55570; GFX900-NEXT:    ;;#ASMSTART5571; GFX900-NEXT:    ; use s85572; GFX900-NEXT:    ;;#ASMEND5573; GFX900-NEXT:    s_setpc_b64 s[30:31]5574;5575; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_3:5576; GFX90A:       ; %bb.0:5577; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5578; GFX90A-NEXT:    ;;#ASMSTART5579; GFX90A-NEXT:    ; def s[4:5]5580; GFX90A-NEXT:    ;;#ASMEND5581; GFX90A-NEXT:    s_lshr_b32 s5, s5, 165582; GFX90A-NEXT:    s_lshr_b32 s4, s4, 165583; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s55584; GFX90A-NEXT:    ;;#ASMSTART5585; GFX90A-NEXT:    ; use s85586; GFX90A-NEXT:    ;;#ASMEND5587; GFX90A-NEXT:    s_setpc_b64 s[30:31]5588;5589; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_3:5590; GFX942:       ; %bb.0:5591; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5592; GFX942-NEXT:    ;;#ASMSTART5593; GFX942-NEXT:    ; def s[0:1]5594; GFX942-NEXT:    ;;#ASMEND5595; GFX942-NEXT:    s_lshr_b32 s1, s1, 165596; GFX942-NEXT:    s_lshr_b32 s0, s0, 165597; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s15598; GFX942-NEXT:    ;;#ASMSTART5599; GFX942-NEXT:    ; use s85600; GFX942-NEXT:    ;;#ASMEND5601; GFX942-NEXT:    s_setpc_b64 s[30:31]5602  %vec0 = call <4 x half> asm "; def $0", "=s"()5603  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 3>5604  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5605  ret void5606}5607 5608define void @s_shuffle_v2f16_v4f16__2_3() {5609; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_3:5610; GFX900:       ; %bb.0:5611; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5612; GFX900-NEXT:    ;;#ASMSTART5613; GFX900-NEXT:    ; def s[4:5]5614; GFX900-NEXT:    ;;#ASMEND5615; GFX900-NEXT:    s_mov_b32 s8, s55616; GFX900-NEXT:    ;;#ASMSTART5617; GFX900-NEXT:    ; use s85618; GFX900-NEXT:    ;;#ASMEND5619; GFX900-NEXT:    s_setpc_b64 s[30:31]5620;5621; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_3:5622; GFX90A:       ; %bb.0:5623; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5624; GFX90A-NEXT:    ;;#ASMSTART5625; GFX90A-NEXT:    ; def s[4:5]5626; GFX90A-NEXT:    ;;#ASMEND5627; GFX90A-NEXT:    s_mov_b32 s8, s55628; GFX90A-NEXT:    ;;#ASMSTART5629; GFX90A-NEXT:    ; use s85630; GFX90A-NEXT:    ;;#ASMEND5631; GFX90A-NEXT:    s_setpc_b64 s[30:31]5632;5633; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_3:5634; GFX942:       ; %bb.0:5635; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5636; GFX942-NEXT:    ;;#ASMSTART5637; GFX942-NEXT:    ; def s[0:1]5638; GFX942-NEXT:    ;;#ASMEND5639; GFX942-NEXT:    s_mov_b32 s8, s15640; GFX942-NEXT:    ;;#ASMSTART5641; GFX942-NEXT:    ; use s85642; GFX942-NEXT:    ;;#ASMEND5643; GFX942-NEXT:    s_setpc_b64 s[30:31]5644  %vec0 = call <4 x half> asm "; def $0", "=s"()5645  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 3>5646  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5647  ret void5648}5649 5650define void @s_shuffle_v2f16_v4f16__3_3() {5651; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_3:5652; GFX900:       ; %bb.0:5653; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5654; GFX900-NEXT:    ;;#ASMSTART5655; GFX900-NEXT:    ; def s[4:5]5656; GFX900-NEXT:    ;;#ASMEND5657; GFX900-NEXT:    s_lshr_b32 s4, s5, 165658; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s45659; GFX900-NEXT:    ;;#ASMSTART5660; GFX900-NEXT:    ; use s85661; GFX900-NEXT:    ;;#ASMEND5662; GFX900-NEXT:    s_setpc_b64 s[30:31]5663;5664; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_3:5665; GFX90A:       ; %bb.0:5666; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5667; GFX90A-NEXT:    ;;#ASMSTART5668; GFX90A-NEXT:    ; def s[4:5]5669; GFX90A-NEXT:    ;;#ASMEND5670; GFX90A-NEXT:    s_lshr_b32 s4, s5, 165671; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s45672; GFX90A-NEXT:    ;;#ASMSTART5673; GFX90A-NEXT:    ; use s85674; GFX90A-NEXT:    ;;#ASMEND5675; GFX90A-NEXT:    s_setpc_b64 s[30:31]5676;5677; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_3:5678; GFX942:       ; %bb.0:5679; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5680; GFX942-NEXT:    ;;#ASMSTART5681; GFX942-NEXT:    ; def s[0:1]5682; GFX942-NEXT:    ;;#ASMEND5683; GFX942-NEXT:    s_lshr_b32 s0, s1, 165684; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s05685; GFX942-NEXT:    ;;#ASMSTART5686; GFX942-NEXT:    ; use s85687; GFX942-NEXT:    ;;#ASMEND5688; GFX942-NEXT:    s_setpc_b64 s[30:31]5689  %vec0 = call <4 x half> asm "; def $0", "=s"()5690  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 3>5691  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5692  ret void5693}5694 5695define void @s_shuffle_v2f16_v4f16__4_3() {5696; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_3:5697; GFX900:       ; %bb.0:5698; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5699; GFX900-NEXT:    ;;#ASMSTART5700; GFX900-NEXT:    ; def s[4:5]5701; GFX900-NEXT:    ;;#ASMEND5702; GFX900-NEXT:    s_mov_b32 s8, s55703; GFX900-NEXT:    ;;#ASMSTART5704; GFX900-NEXT:    ; use s85705; GFX900-NEXT:    ;;#ASMEND5706; GFX900-NEXT:    s_setpc_b64 s[30:31]5707;5708; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_3:5709; GFX90A:       ; %bb.0:5710; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5711; GFX90A-NEXT:    ;;#ASMSTART5712; GFX90A-NEXT:    ; def s[4:5]5713; GFX90A-NEXT:    ;;#ASMEND5714; GFX90A-NEXT:    s_mov_b32 s8, s55715; GFX90A-NEXT:    ;;#ASMSTART5716; GFX90A-NEXT:    ; use s85717; GFX90A-NEXT:    ;;#ASMEND5718; GFX90A-NEXT:    s_setpc_b64 s[30:31]5719;5720; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_3:5721; GFX942:       ; %bb.0:5722; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5723; GFX942-NEXT:    ;;#ASMSTART5724; GFX942-NEXT:    ; def s[0:1]5725; GFX942-NEXT:    ;;#ASMEND5726; GFX942-NEXT:    s_mov_b32 s8, s15727; GFX942-NEXT:    ;;#ASMSTART5728; GFX942-NEXT:    ; use s85729; GFX942-NEXT:    ;;#ASMEND5730; GFX942-NEXT:    s_setpc_b64 s[30:31]5731  %vec0 = call <4 x half> asm "; def $0", "=s"()5732  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 3>5733  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5734  ret void5735}5736 5737define void @s_shuffle_v2f16_v4f16__5_3() {5738; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_3:5739; GFX900:       ; %bb.0:5740; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5741; GFX900-NEXT:    ;;#ASMSTART5742; GFX900-NEXT:    ; def s[4:5]5743; GFX900-NEXT:    ;;#ASMEND5744; GFX900-NEXT:    ;;#ASMSTART5745; GFX900-NEXT:    ; def s[6:7]5746; GFX900-NEXT:    ;;#ASMEND5747; GFX900-NEXT:    s_lshr_b32 s4, s5, 165748; GFX900-NEXT:    s_lshr_b32 s5, s6, 165749; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s45750; GFX900-NEXT:    ;;#ASMSTART5751; GFX900-NEXT:    ; use s85752; GFX900-NEXT:    ;;#ASMEND5753; GFX900-NEXT:    s_setpc_b64 s[30:31]5754;5755; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_3:5756; GFX90A:       ; %bb.0:5757; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5758; GFX90A-NEXT:    ;;#ASMSTART5759; GFX90A-NEXT:    ; def s[4:5]5760; GFX90A-NEXT:    ;;#ASMEND5761; GFX90A-NEXT:    ;;#ASMSTART5762; GFX90A-NEXT:    ; def s[6:7]5763; GFX90A-NEXT:    ;;#ASMEND5764; GFX90A-NEXT:    s_lshr_b32 s4, s5, 165765; GFX90A-NEXT:    s_lshr_b32 s5, s6, 165766; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s45767; GFX90A-NEXT:    ;;#ASMSTART5768; GFX90A-NEXT:    ; use s85769; GFX90A-NEXT:    ;;#ASMEND5770; GFX90A-NEXT:    s_setpc_b64 s[30:31]5771;5772; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_3:5773; GFX942:       ; %bb.0:5774; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5775; GFX942-NEXT:    ;;#ASMSTART5776; GFX942-NEXT:    ; def s[0:1]5777; GFX942-NEXT:    ;;#ASMEND5778; GFX942-NEXT:    ;;#ASMSTART5779; GFX942-NEXT:    ; def s[2:3]5780; GFX942-NEXT:    ;;#ASMEND5781; GFX942-NEXT:    s_lshr_b32 s0, s1, 165782; GFX942-NEXT:    s_lshr_b32 s1, s2, 165783; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s05784; GFX942-NEXT:    ;;#ASMSTART5785; GFX942-NEXT:    ; use s85786; GFX942-NEXT:    ;;#ASMEND5787; GFX942-NEXT:    s_setpc_b64 s[30:31]5788  %vec0 = call <4 x half> asm "; def $0", "=s"()5789  %vec1 = call <4 x half> asm "; def $0", "=s"()5790  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 3>5791  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5792  ret void5793}5794 5795define void @s_shuffle_v2f16_v4f16__6_3() {5796; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_3:5797; GFX900:       ; %bb.0:5798; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5799; GFX900-NEXT:    ;;#ASMSTART5800; GFX900-NEXT:    ; def s[4:5]5801; GFX900-NEXT:    ;;#ASMEND5802; GFX900-NEXT:    s_lshr_b32 s4, s5, 165803; GFX900-NEXT:    ;;#ASMSTART5804; GFX900-NEXT:    ; def s[6:7]5805; GFX900-NEXT:    ;;#ASMEND5806; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s45807; GFX900-NEXT:    ;;#ASMSTART5808; GFX900-NEXT:    ; use s85809; GFX900-NEXT:    ;;#ASMEND5810; GFX900-NEXT:    s_setpc_b64 s[30:31]5811;5812; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_3:5813; GFX90A:       ; %bb.0:5814; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5815; GFX90A-NEXT:    ;;#ASMSTART5816; GFX90A-NEXT:    ; def s[4:5]5817; GFX90A-NEXT:    ;;#ASMEND5818; GFX90A-NEXT:    s_lshr_b32 s4, s5, 165819; GFX90A-NEXT:    ;;#ASMSTART5820; GFX90A-NEXT:    ; def s[6:7]5821; GFX90A-NEXT:    ;;#ASMEND5822; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s45823; GFX90A-NEXT:    ;;#ASMSTART5824; GFX90A-NEXT:    ; use s85825; GFX90A-NEXT:    ;;#ASMEND5826; GFX90A-NEXT:    s_setpc_b64 s[30:31]5827;5828; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_3:5829; GFX942:       ; %bb.0:5830; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5831; GFX942-NEXT:    ;;#ASMSTART5832; GFX942-NEXT:    ; def s[0:1]5833; GFX942-NEXT:    ;;#ASMEND5834; GFX942-NEXT:    s_lshr_b32 s0, s1, 165835; GFX942-NEXT:    ;;#ASMSTART5836; GFX942-NEXT:    ; def s[2:3]5837; GFX942-NEXT:    ;;#ASMEND5838; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s3, s05839; GFX942-NEXT:    ;;#ASMSTART5840; GFX942-NEXT:    ; use s85841; GFX942-NEXT:    ;;#ASMEND5842; GFX942-NEXT:    s_setpc_b64 s[30:31]5843  %vec0 = call <4 x half> asm "; def $0", "=s"()5844  %vec1 = call <4 x half> asm "; def $0", "=s"()5845  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 3>5846  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5847  ret void5848}5849 5850define void @s_shuffle_v2f16_v4f16__u_4() {5851; GFX9-LABEL: s_shuffle_v2f16_v4f16__u_4:5852; GFX9:       ; %bb.0:5853; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5854; GFX9-NEXT:    ;;#ASMSTART5855; GFX9-NEXT:    ; use s85856; GFX9-NEXT:    ;;#ASMEND5857; GFX9-NEXT:    s_setpc_b64 s[30:31]5858  %vec0 = call <4 x half> asm "; def $0", "=s"()5859  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 poison, i32 4>5860  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5861  ret void5862}5863 5864define void @s_shuffle_v2f16_v4f16__0_4() {5865; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_4:5866; GFX900:       ; %bb.0:5867; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5868; GFX900-NEXT:    ;;#ASMSTART5869; GFX900-NEXT:    ; def s[8:9]5870; GFX900-NEXT:    ;;#ASMEND5871; GFX900-NEXT:    ;;#ASMSTART5872; GFX900-NEXT:    ; use s85873; GFX900-NEXT:    ;;#ASMEND5874; GFX900-NEXT:    s_setpc_b64 s[30:31]5875;5876; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_4:5877; GFX90A:       ; %bb.0:5878; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5879; GFX90A-NEXT:    ;;#ASMSTART5880; GFX90A-NEXT:    ; def s[8:9]5881; GFX90A-NEXT:    ;;#ASMEND5882; GFX90A-NEXT:    ;;#ASMSTART5883; GFX90A-NEXT:    ; use s85884; GFX90A-NEXT:    ;;#ASMEND5885; GFX90A-NEXT:    s_setpc_b64 s[30:31]5886;5887; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_4:5888; GFX942:       ; %bb.0:5889; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5890; GFX942-NEXT:    ;;#ASMSTART5891; GFX942-NEXT:    ; def s[8:9]5892; GFX942-NEXT:    ;;#ASMEND5893; GFX942-NEXT:    s_nop 05894; GFX942-NEXT:    ;;#ASMSTART5895; GFX942-NEXT:    ; use s85896; GFX942-NEXT:    ;;#ASMEND5897; GFX942-NEXT:    s_setpc_b64 s[30:31]5898  %vec0 = call <4 x half> asm "; def $0", "=s"()5899  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 0, i32 4>5900  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5901  ret void5902}5903 5904define void @s_shuffle_v2f16_v4f16__1_4() {5905; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_4:5906; GFX900:       ; %bb.0:5907; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5908; GFX900-NEXT:    ;;#ASMSTART5909; GFX900-NEXT:    ; def s[4:5]5910; GFX900-NEXT:    ;;#ASMEND5911; GFX900-NEXT:    s_lshr_b32 s8, s4, 165912; GFX900-NEXT:    ;;#ASMSTART5913; GFX900-NEXT:    ; use s85914; GFX900-NEXT:    ;;#ASMEND5915; GFX900-NEXT:    s_setpc_b64 s[30:31]5916;5917; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_4:5918; GFX90A:       ; %bb.0:5919; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5920; GFX90A-NEXT:    ;;#ASMSTART5921; GFX90A-NEXT:    ; def s[4:5]5922; GFX90A-NEXT:    ;;#ASMEND5923; GFX90A-NEXT:    s_lshr_b32 s8, s4, 165924; GFX90A-NEXT:    ;;#ASMSTART5925; GFX90A-NEXT:    ; use s85926; GFX90A-NEXT:    ;;#ASMEND5927; GFX90A-NEXT:    s_setpc_b64 s[30:31]5928;5929; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_4:5930; GFX942:       ; %bb.0:5931; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5932; GFX942-NEXT:    ;;#ASMSTART5933; GFX942-NEXT:    ; def s[0:1]5934; GFX942-NEXT:    ;;#ASMEND5935; GFX942-NEXT:    s_lshr_b32 s8, s0, 165936; GFX942-NEXT:    ;;#ASMSTART5937; GFX942-NEXT:    ; use s85938; GFX942-NEXT:    ;;#ASMEND5939; GFX942-NEXT:    s_setpc_b64 s[30:31]5940  %vec0 = call <4 x half> asm "; def $0", "=s"()5941  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 1, i32 4>5942  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5943  ret void5944}5945 5946define void @s_shuffle_v2f16_v4f16__2_4() {5947; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_4:5948; GFX900:       ; %bb.0:5949; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5950; GFX900-NEXT:    ;;#ASMSTART5951; GFX900-NEXT:    ; def s[4:5]5952; GFX900-NEXT:    ;;#ASMEND5953; GFX900-NEXT:    s_mov_b32 s8, s55954; GFX900-NEXT:    ;;#ASMSTART5955; GFX900-NEXT:    ; use s85956; GFX900-NEXT:    ;;#ASMEND5957; GFX900-NEXT:    s_setpc_b64 s[30:31]5958;5959; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_4:5960; GFX90A:       ; %bb.0:5961; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5962; GFX90A-NEXT:    ;;#ASMSTART5963; GFX90A-NEXT:    ; def s[4:5]5964; GFX90A-NEXT:    ;;#ASMEND5965; GFX90A-NEXT:    s_mov_b32 s8, s55966; GFX90A-NEXT:    ;;#ASMSTART5967; GFX90A-NEXT:    ; use s85968; GFX90A-NEXT:    ;;#ASMEND5969; GFX90A-NEXT:    s_setpc_b64 s[30:31]5970;5971; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_4:5972; GFX942:       ; %bb.0:5973; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5974; GFX942-NEXT:    ;;#ASMSTART5975; GFX942-NEXT:    ; def s[0:1]5976; GFX942-NEXT:    ;;#ASMEND5977; GFX942-NEXT:    s_mov_b32 s8, s15978; GFX942-NEXT:    ;;#ASMSTART5979; GFX942-NEXT:    ; use s85980; GFX942-NEXT:    ;;#ASMEND5981; GFX942-NEXT:    s_setpc_b64 s[30:31]5982  %vec0 = call <4 x half> asm "; def $0", "=s"()5983  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 2, i32 4>5984  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)5985  ret void5986}5987 5988define void @s_shuffle_v2f16_v4f16__3_4() {5989; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_4:5990; GFX900:       ; %bb.0:5991; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5992; GFX900-NEXT:    ;;#ASMSTART5993; GFX900-NEXT:    ; def s[4:5]5994; GFX900-NEXT:    ;;#ASMEND5995; GFX900-NEXT:    s_lshr_b32 s8, s5, 165996; GFX900-NEXT:    ;;#ASMSTART5997; GFX900-NEXT:    ; use s85998; GFX900-NEXT:    ;;#ASMEND5999; GFX900-NEXT:    s_setpc_b64 s[30:31]6000;6001; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_4:6002; GFX90A:       ; %bb.0:6003; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6004; GFX90A-NEXT:    ;;#ASMSTART6005; GFX90A-NEXT:    ; def s[4:5]6006; GFX90A-NEXT:    ;;#ASMEND6007; GFX90A-NEXT:    s_lshr_b32 s8, s5, 166008; GFX90A-NEXT:    ;;#ASMSTART6009; GFX90A-NEXT:    ; use s86010; GFX90A-NEXT:    ;;#ASMEND6011; GFX90A-NEXT:    s_setpc_b64 s[30:31]6012;6013; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_4:6014; GFX942:       ; %bb.0:6015; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6016; GFX942-NEXT:    ;;#ASMSTART6017; GFX942-NEXT:    ; def s[0:1]6018; GFX942-NEXT:    ;;#ASMEND6019; GFX942-NEXT:    s_lshr_b32 s8, s1, 166020; GFX942-NEXT:    ;;#ASMSTART6021; GFX942-NEXT:    ; use s86022; GFX942-NEXT:    ;;#ASMEND6023; GFX942-NEXT:    s_setpc_b64 s[30:31]6024  %vec0 = call <4 x half> asm "; def $0", "=s"()6025  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 3, i32 4>6026  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6027  ret void6028}6029 6030define void @s_shuffle_v2f16_v4f16__4_4() {6031; GFX9-LABEL: s_shuffle_v2f16_v4f16__4_4:6032; GFX9:       ; %bb.0:6033; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6034; GFX9-NEXT:    ;;#ASMSTART6035; GFX9-NEXT:    ; use s86036; GFX9-NEXT:    ;;#ASMEND6037; GFX9-NEXT:    s_setpc_b64 s[30:31]6038  %vec0 = call <4 x half> asm "; def $0", "=s"()6039  %shuf = shufflevector <4 x half> %vec0, <4 x half> poison, <2 x i32> <i32 4, i32 4>6040  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6041  ret void6042}6043 6044define void @s_shuffle_v2f16_v4f16__5_4() {6045; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_4:6046; GFX900:       ; %bb.0:6047; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6048; GFX900-NEXT:    ;;#ASMSTART6049; GFX900-NEXT:    ; def s[4:5]6050; GFX900-NEXT:    ;;#ASMEND6051; GFX900-NEXT:    s_lshr_b32 s5, s4, 166052; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s46053; GFX900-NEXT:    ;;#ASMSTART6054; GFX900-NEXT:    ; use s86055; GFX900-NEXT:    ;;#ASMEND6056; GFX900-NEXT:    s_setpc_b64 s[30:31]6057;6058; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_4:6059; GFX90A:       ; %bb.0:6060; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6061; GFX90A-NEXT:    ;;#ASMSTART6062; GFX90A-NEXT:    ; def s[4:5]6063; GFX90A-NEXT:    ;;#ASMEND6064; GFX90A-NEXT:    s_lshr_b32 s5, s4, 166065; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s46066; GFX90A-NEXT:    ;;#ASMSTART6067; GFX90A-NEXT:    ; use s86068; GFX90A-NEXT:    ;;#ASMEND6069; GFX90A-NEXT:    s_setpc_b64 s[30:31]6070;6071; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_4:6072; GFX942:       ; %bb.0:6073; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6074; GFX942-NEXT:    ;;#ASMSTART6075; GFX942-NEXT:    ; def s[0:1]6076; GFX942-NEXT:    ;;#ASMEND6077; GFX942-NEXT:    s_lshr_b32 s1, s0, 166078; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s06079; GFX942-NEXT:    ;;#ASMSTART6080; GFX942-NEXT:    ; use s86081; GFX942-NEXT:    ;;#ASMEND6082; GFX942-NEXT:    s_setpc_b64 s[30:31]6083  %vec0 = call <4 x half> asm "; def $0", "=s"()6084  %vec1 = call <4 x half> asm "; def $0", "=s"()6085  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 4>6086  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6087  ret void6088}6089 6090define void @s_shuffle_v2f16_v4f16__6_4() {6091; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_4:6092; GFX900:       ; %bb.0:6093; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6094; GFX900-NEXT:    ;;#ASMSTART6095; GFX900-NEXT:    ; def s[4:5]6096; GFX900-NEXT:    ;;#ASMEND6097; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s46098; GFX900-NEXT:    ;;#ASMSTART6099; GFX900-NEXT:    ; use s86100; GFX900-NEXT:    ;;#ASMEND6101; GFX900-NEXT:    s_setpc_b64 s[30:31]6102;6103; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_4:6104; GFX90A:       ; %bb.0:6105; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6106; GFX90A-NEXT:    ;;#ASMSTART6107; GFX90A-NEXT:    ; def s[4:5]6108; GFX90A-NEXT:    ;;#ASMEND6109; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s46110; GFX90A-NEXT:    ;;#ASMSTART6111; GFX90A-NEXT:    ; use s86112; GFX90A-NEXT:    ;;#ASMEND6113; GFX90A-NEXT:    s_setpc_b64 s[30:31]6114;6115; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_4:6116; GFX942:       ; %bb.0:6117; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6118; GFX942-NEXT:    ;;#ASMSTART6119; GFX942-NEXT:    ; def s[0:1]6120; GFX942-NEXT:    ;;#ASMEND6121; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s06122; GFX942-NEXT:    ;;#ASMSTART6123; GFX942-NEXT:    ; use s86124; GFX942-NEXT:    ;;#ASMEND6125; GFX942-NEXT:    s_setpc_b64 s[30:31]6126  %vec0 = call <4 x half> asm "; def $0", "=s"()6127  %vec1 = call <4 x half> asm "; def $0", "=s"()6128  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 4>6129  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6130  ret void6131}6132 6133define void @s_shuffle_v2f16_v4f16__u_5() {6134; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_5:6135; GFX900:       ; %bb.0:6136; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6137; GFX900-NEXT:    ;;#ASMSTART6138; GFX900-NEXT:    ; def s[8:9]6139; GFX900-NEXT:    ;;#ASMEND6140; GFX900-NEXT:    ;;#ASMSTART6141; GFX900-NEXT:    ; use s86142; GFX900-NEXT:    ;;#ASMEND6143; GFX900-NEXT:    s_setpc_b64 s[30:31]6144;6145; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_5:6146; GFX90A:       ; %bb.0:6147; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6148; GFX90A-NEXT:    ;;#ASMSTART6149; GFX90A-NEXT:    ; def s[8:9]6150; GFX90A-NEXT:    ;;#ASMEND6151; GFX90A-NEXT:    ;;#ASMSTART6152; GFX90A-NEXT:    ; use s86153; GFX90A-NEXT:    ;;#ASMEND6154; GFX90A-NEXT:    s_setpc_b64 s[30:31]6155;6156; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_5:6157; GFX942:       ; %bb.0:6158; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6159; GFX942-NEXT:    ;;#ASMSTART6160; GFX942-NEXT:    ; def s[8:9]6161; GFX942-NEXT:    ;;#ASMEND6162; GFX942-NEXT:    s_nop 06163; GFX942-NEXT:    ;;#ASMSTART6164; GFX942-NEXT:    ; use s86165; GFX942-NEXT:    ;;#ASMEND6166; GFX942-NEXT:    s_setpc_b64 s[30:31]6167  %vec0 = call <4 x half> asm "; def $0", "=s"()6168  %vec1 = call <4 x half> asm "; def $0", "=s"()6169  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 5>6170  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6171  ret void6172}6173 6174define void @s_shuffle_v2f16_v4f16__0_5() {6175; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_5:6176; GFX900:       ; %bb.0:6177; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6178; GFX900-NEXT:    ;;#ASMSTART6179; GFX900-NEXT:    ; def s[4:5]6180; GFX900-NEXT:    ;;#ASMEND6181; GFX900-NEXT:    ;;#ASMSTART6182; GFX900-NEXT:    ; def s[6:7]6183; GFX900-NEXT:    ;;#ASMEND6184; GFX900-NEXT:    s_lshr_b32 s5, s6, 166185; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s56186; GFX900-NEXT:    ;;#ASMSTART6187; GFX900-NEXT:    ; use s86188; GFX900-NEXT:    ;;#ASMEND6189; GFX900-NEXT:    s_setpc_b64 s[30:31]6190;6191; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_5:6192; GFX90A:       ; %bb.0:6193; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6194; GFX90A-NEXT:    ;;#ASMSTART6195; GFX90A-NEXT:    ; def s[4:5]6196; GFX90A-NEXT:    ;;#ASMEND6197; GFX90A-NEXT:    ;;#ASMSTART6198; GFX90A-NEXT:    ; def s[6:7]6199; GFX90A-NEXT:    ;;#ASMEND6200; GFX90A-NEXT:    s_lshr_b32 s5, s6, 166201; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s56202; GFX90A-NEXT:    ;;#ASMSTART6203; GFX90A-NEXT:    ; use s86204; GFX90A-NEXT:    ;;#ASMEND6205; GFX90A-NEXT:    s_setpc_b64 s[30:31]6206;6207; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_5:6208; GFX942:       ; %bb.0:6209; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6210; GFX942-NEXT:    ;;#ASMSTART6211; GFX942-NEXT:    ; def s[0:1]6212; GFX942-NEXT:    ;;#ASMEND6213; GFX942-NEXT:    ;;#ASMSTART6214; GFX942-NEXT:    ; def s[2:3]6215; GFX942-NEXT:    ;;#ASMEND6216; GFX942-NEXT:    s_lshr_b32 s1, s2, 166217; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s16218; GFX942-NEXT:    ;;#ASMSTART6219; GFX942-NEXT:    ; use s86220; GFX942-NEXT:    ;;#ASMEND6221; GFX942-NEXT:    s_setpc_b64 s[30:31]6222  %vec0 = call <4 x half> asm "; def $0", "=s"()6223  %vec1 = call <4 x half> asm "; def $0", "=s"()6224  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 5>6225  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6226  ret void6227}6228 6229define void @s_shuffle_v2f16_v4f16__1_5() {6230; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_5:6231; GFX900:       ; %bb.0:6232; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6233; GFX900-NEXT:    ;;#ASMSTART6234; GFX900-NEXT:    ; def s[4:5]6235; GFX900-NEXT:    ;;#ASMEND6236; GFX900-NEXT:    ;;#ASMSTART6237; GFX900-NEXT:    ; def s[6:7]6238; GFX900-NEXT:    ;;#ASMEND6239; GFX900-NEXT:    s_lshr_b32 s5, s6, 166240; GFX900-NEXT:    s_lshr_b32 s4, s4, 166241; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s56242; GFX900-NEXT:    ;;#ASMSTART6243; GFX900-NEXT:    ; use s86244; GFX900-NEXT:    ;;#ASMEND6245; GFX900-NEXT:    s_setpc_b64 s[30:31]6246;6247; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_5:6248; GFX90A:       ; %bb.0:6249; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6250; GFX90A-NEXT:    ;;#ASMSTART6251; GFX90A-NEXT:    ; def s[4:5]6252; GFX90A-NEXT:    ;;#ASMEND6253; GFX90A-NEXT:    ;;#ASMSTART6254; GFX90A-NEXT:    ; def s[6:7]6255; GFX90A-NEXT:    ;;#ASMEND6256; GFX90A-NEXT:    s_lshr_b32 s5, s6, 166257; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166258; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s56259; GFX90A-NEXT:    ;;#ASMSTART6260; GFX90A-NEXT:    ; use s86261; GFX90A-NEXT:    ;;#ASMEND6262; GFX90A-NEXT:    s_setpc_b64 s[30:31]6263;6264; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_5:6265; GFX942:       ; %bb.0:6266; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6267; GFX942-NEXT:    ;;#ASMSTART6268; GFX942-NEXT:    ; def s[0:1]6269; GFX942-NEXT:    ;;#ASMEND6270; GFX942-NEXT:    ;;#ASMSTART6271; GFX942-NEXT:    ; def s[2:3]6272; GFX942-NEXT:    ;;#ASMEND6273; GFX942-NEXT:    s_lshr_b32 s1, s2, 166274; GFX942-NEXT:    s_lshr_b32 s0, s0, 166275; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s16276; GFX942-NEXT:    ;;#ASMSTART6277; GFX942-NEXT:    ; use s86278; GFX942-NEXT:    ;;#ASMEND6279; GFX942-NEXT:    s_setpc_b64 s[30:31]6280  %vec0 = call <4 x half> asm "; def $0", "=s"()6281  %vec1 = call <4 x half> asm "; def $0", "=s"()6282  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 5>6283  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6284  ret void6285}6286 6287define void @s_shuffle_v2f16_v4f16__2_5() {6288; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_5:6289; GFX900:       ; %bb.0:6290; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6291; GFX900-NEXT:    ;;#ASMSTART6292; GFX900-NEXT:    ; def s[4:5]6293; GFX900-NEXT:    ;;#ASMEND6294; GFX900-NEXT:    ;;#ASMSTART6295; GFX900-NEXT:    ; def s[6:7]6296; GFX900-NEXT:    ;;#ASMEND6297; GFX900-NEXT:    s_lshr_b32 s4, s6, 166298; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s46299; GFX900-NEXT:    ;;#ASMSTART6300; GFX900-NEXT:    ; use s86301; GFX900-NEXT:    ;;#ASMEND6302; GFX900-NEXT:    s_setpc_b64 s[30:31]6303;6304; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_5:6305; GFX90A:       ; %bb.0:6306; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6307; GFX90A-NEXT:    ;;#ASMSTART6308; GFX90A-NEXT:    ; def s[4:5]6309; GFX90A-NEXT:    ;;#ASMEND6310; GFX90A-NEXT:    ;;#ASMSTART6311; GFX90A-NEXT:    ; def s[6:7]6312; GFX90A-NEXT:    ;;#ASMEND6313; GFX90A-NEXT:    s_lshr_b32 s4, s6, 166314; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s46315; GFX90A-NEXT:    ;;#ASMSTART6316; GFX90A-NEXT:    ; use s86317; GFX90A-NEXT:    ;;#ASMEND6318; GFX90A-NEXT:    s_setpc_b64 s[30:31]6319;6320; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_5:6321; GFX942:       ; %bb.0:6322; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6323; GFX942-NEXT:    ;;#ASMSTART6324; GFX942-NEXT:    ; def s[0:1]6325; GFX942-NEXT:    ;;#ASMEND6326; GFX942-NEXT:    ;;#ASMSTART6327; GFX942-NEXT:    ; def s[2:3]6328; GFX942-NEXT:    ;;#ASMEND6329; GFX942-NEXT:    s_lshr_b32 s0, s2, 166330; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s06331; GFX942-NEXT:    ;;#ASMSTART6332; GFX942-NEXT:    ; use s86333; GFX942-NEXT:    ;;#ASMEND6334; GFX942-NEXT:    s_setpc_b64 s[30:31]6335  %vec0 = call <4 x half> asm "; def $0", "=s"()6336  %vec1 = call <4 x half> asm "; def $0", "=s"()6337  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 5>6338  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6339  ret void6340}6341 6342define void @s_shuffle_v2f16_v4f16__3_5() {6343; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_5:6344; GFX900:       ; %bb.0:6345; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6346; GFX900-NEXT:    ;;#ASMSTART6347; GFX900-NEXT:    ; def s[4:5]6348; GFX900-NEXT:    ;;#ASMEND6349; GFX900-NEXT:    ;;#ASMSTART6350; GFX900-NEXT:    ; def s[6:7]6351; GFX900-NEXT:    ;;#ASMEND6352; GFX900-NEXT:    s_lshr_b32 s4, s6, 166353; GFX900-NEXT:    s_lshr_b32 s5, s5, 166354; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s46355; GFX900-NEXT:    ;;#ASMSTART6356; GFX900-NEXT:    ; use s86357; GFX900-NEXT:    ;;#ASMEND6358; GFX900-NEXT:    s_setpc_b64 s[30:31]6359;6360; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_5:6361; GFX90A:       ; %bb.0:6362; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6363; GFX90A-NEXT:    ;;#ASMSTART6364; GFX90A-NEXT:    ; def s[4:5]6365; GFX90A-NEXT:    ;;#ASMEND6366; GFX90A-NEXT:    ;;#ASMSTART6367; GFX90A-NEXT:    ; def s[6:7]6368; GFX90A-NEXT:    ;;#ASMEND6369; GFX90A-NEXT:    s_lshr_b32 s4, s6, 166370; GFX90A-NEXT:    s_lshr_b32 s5, s5, 166371; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s46372; GFX90A-NEXT:    ;;#ASMSTART6373; GFX90A-NEXT:    ; use s86374; GFX90A-NEXT:    ;;#ASMEND6375; GFX90A-NEXT:    s_setpc_b64 s[30:31]6376;6377; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_5:6378; GFX942:       ; %bb.0:6379; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6380; GFX942-NEXT:    ;;#ASMSTART6381; GFX942-NEXT:    ; def s[0:1]6382; GFX942-NEXT:    ;;#ASMEND6383; GFX942-NEXT:    ;;#ASMSTART6384; GFX942-NEXT:    ; def s[2:3]6385; GFX942-NEXT:    ;;#ASMEND6386; GFX942-NEXT:    s_lshr_b32 s0, s2, 166387; GFX942-NEXT:    s_lshr_b32 s1, s1, 166388; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s06389; GFX942-NEXT:    ;;#ASMSTART6390; GFX942-NEXT:    ; use s86391; GFX942-NEXT:    ;;#ASMEND6392; GFX942-NEXT:    s_setpc_b64 s[30:31]6393  %vec0 = call <4 x half> asm "; def $0", "=s"()6394  %vec1 = call <4 x half> asm "; def $0", "=s"()6395  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 5>6396  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6397  ret void6398}6399 6400define void @s_shuffle_v2f16_v4f16__4_5() {6401; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_5:6402; GFX900:       ; %bb.0:6403; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6404; GFX900-NEXT:    ;;#ASMSTART6405; GFX900-NEXT:    ; def s[8:9]6406; GFX900-NEXT:    ;;#ASMEND6407; GFX900-NEXT:    ;;#ASMSTART6408; GFX900-NEXT:    ; use s86409; GFX900-NEXT:    ;;#ASMEND6410; GFX900-NEXT:    s_setpc_b64 s[30:31]6411;6412; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_5:6413; GFX90A:       ; %bb.0:6414; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6415; GFX90A-NEXT:    ;;#ASMSTART6416; GFX90A-NEXT:    ; def s[8:9]6417; GFX90A-NEXT:    ;;#ASMEND6418; GFX90A-NEXT:    ;;#ASMSTART6419; GFX90A-NEXT:    ; use s86420; GFX90A-NEXT:    ;;#ASMEND6421; GFX90A-NEXT:    s_setpc_b64 s[30:31]6422;6423; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_5:6424; GFX942:       ; %bb.0:6425; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6426; GFX942-NEXT:    ;;#ASMSTART6427; GFX942-NEXT:    ; def s[8:9]6428; GFX942-NEXT:    ;;#ASMEND6429; GFX942-NEXT:    s_nop 06430; GFX942-NEXT:    ;;#ASMSTART6431; GFX942-NEXT:    ; use s86432; GFX942-NEXT:    ;;#ASMEND6433; GFX942-NEXT:    s_setpc_b64 s[30:31]6434  %vec0 = call <4 x half> asm "; def $0", "=s"()6435  %vec1 = call <4 x half> asm "; def $0", "=s"()6436  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 5>6437  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6438  ret void6439}6440 6441define void @s_shuffle_v2f16_v4f16__5_5() {6442; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_5:6443; GFX900:       ; %bb.0:6444; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6445; GFX900-NEXT:    ;;#ASMSTART6446; GFX900-NEXT:    ; def s[4:5]6447; GFX900-NEXT:    ;;#ASMEND6448; GFX900-NEXT:    s_lshr_b32 s4, s4, 166449; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s46450; GFX900-NEXT:    ;;#ASMSTART6451; GFX900-NEXT:    ; use s86452; GFX900-NEXT:    ;;#ASMEND6453; GFX900-NEXT:    s_setpc_b64 s[30:31]6454;6455; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_5:6456; GFX90A:       ; %bb.0:6457; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6458; GFX90A-NEXT:    ;;#ASMSTART6459; GFX90A-NEXT:    ; def s[4:5]6460; GFX90A-NEXT:    ;;#ASMEND6461; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166462; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s46463; GFX90A-NEXT:    ;;#ASMSTART6464; GFX90A-NEXT:    ; use s86465; GFX90A-NEXT:    ;;#ASMEND6466; GFX90A-NEXT:    s_setpc_b64 s[30:31]6467;6468; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_5:6469; GFX942:       ; %bb.0:6470; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6471; GFX942-NEXT:    ;;#ASMSTART6472; GFX942-NEXT:    ; def s[0:1]6473; GFX942-NEXT:    ;;#ASMEND6474; GFX942-NEXT:    s_lshr_b32 s0, s0, 166475; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s06476; GFX942-NEXT:    ;;#ASMSTART6477; GFX942-NEXT:    ; use s86478; GFX942-NEXT:    ;;#ASMEND6479; GFX942-NEXT:    s_setpc_b64 s[30:31]6480  %vec0 = call <4 x half> asm "; def $0", "=s"()6481  %vec1 = call <4 x half> asm "; def $0", "=s"()6482  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 5>6483  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6484  ret void6485}6486 6487define void @s_shuffle_v2f16_v4f16__6_5() {6488; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_5:6489; GFX900:       ; %bb.0:6490; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6491; GFX900-NEXT:    ;;#ASMSTART6492; GFX900-NEXT:    ; def s[4:5]6493; GFX900-NEXT:    ;;#ASMEND6494; GFX900-NEXT:    s_lshr_b32 s4, s4, 166495; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s46496; GFX900-NEXT:    ;;#ASMSTART6497; GFX900-NEXT:    ; use s86498; GFX900-NEXT:    ;;#ASMEND6499; GFX900-NEXT:    s_setpc_b64 s[30:31]6500;6501; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_5:6502; GFX90A:       ; %bb.0:6503; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6504; GFX90A-NEXT:    ;;#ASMSTART6505; GFX90A-NEXT:    ; def s[4:5]6506; GFX90A-NEXT:    ;;#ASMEND6507; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166508; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s46509; GFX90A-NEXT:    ;;#ASMSTART6510; GFX90A-NEXT:    ; use s86511; GFX90A-NEXT:    ;;#ASMEND6512; GFX90A-NEXT:    s_setpc_b64 s[30:31]6513;6514; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_5:6515; GFX942:       ; %bb.0:6516; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6517; GFX942-NEXT:    ;;#ASMSTART6518; GFX942-NEXT:    ; def s[0:1]6519; GFX942-NEXT:    ;;#ASMEND6520; GFX942-NEXT:    s_lshr_b32 s0, s0, 166521; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s06522; GFX942-NEXT:    ;;#ASMSTART6523; GFX942-NEXT:    ; use s86524; GFX942-NEXT:    ;;#ASMEND6525; GFX942-NEXT:    s_setpc_b64 s[30:31]6526  %vec0 = call <4 x half> asm "; def $0", "=s"()6527  %vec1 = call <4 x half> asm "; def $0", "=s"()6528  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 5>6529  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6530  ret void6531}6532 6533define void @s_shuffle_v2f16_v4f16__u_6() {6534; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_6:6535; GFX900:       ; %bb.0:6536; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6537; GFX900-NEXT:    ;;#ASMSTART6538; GFX900-NEXT:    ; def s[4:5]6539; GFX900-NEXT:    ;;#ASMEND6540; GFX900-NEXT:    s_lshl_b32 s8, s5, 166541; GFX900-NEXT:    ;;#ASMSTART6542; GFX900-NEXT:    ; use s86543; GFX900-NEXT:    ;;#ASMEND6544; GFX900-NEXT:    s_setpc_b64 s[30:31]6545;6546; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_6:6547; GFX90A:       ; %bb.0:6548; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6549; GFX90A-NEXT:    ;;#ASMSTART6550; GFX90A-NEXT:    ; def s[4:5]6551; GFX90A-NEXT:    ;;#ASMEND6552; GFX90A-NEXT:    s_lshl_b32 s8, s5, 166553; GFX90A-NEXT:    ;;#ASMSTART6554; GFX90A-NEXT:    ; use s86555; GFX90A-NEXT:    ;;#ASMEND6556; GFX90A-NEXT:    s_setpc_b64 s[30:31]6557;6558; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_6:6559; GFX942:       ; %bb.0:6560; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6561; GFX942-NEXT:    ;;#ASMSTART6562; GFX942-NEXT:    ; def s[0:1]6563; GFX942-NEXT:    ;;#ASMEND6564; GFX942-NEXT:    s_lshl_b32 s8, s1, 166565; GFX942-NEXT:    ;;#ASMSTART6566; GFX942-NEXT:    ; use s86567; GFX942-NEXT:    ;;#ASMEND6568; GFX942-NEXT:    s_setpc_b64 s[30:31]6569  %vec0 = call <4 x half> asm "; def $0", "=s"()6570  %vec1 = call <4 x half> asm "; def $0", "=s"()6571  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 6>6572  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6573  ret void6574}6575 6576define void @s_shuffle_v2f16_v4f16__0_6() {6577; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_6:6578; GFX900:       ; %bb.0:6579; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6580; GFX900-NEXT:    ;;#ASMSTART6581; GFX900-NEXT:    ; def s[4:5]6582; GFX900-NEXT:    ;;#ASMEND6583; GFX900-NEXT:    ;;#ASMSTART6584; GFX900-NEXT:    ; def s[6:7]6585; GFX900-NEXT:    ;;#ASMEND6586; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s76587; GFX900-NEXT:    ;;#ASMSTART6588; GFX900-NEXT:    ; use s86589; GFX900-NEXT:    ;;#ASMEND6590; GFX900-NEXT:    s_setpc_b64 s[30:31]6591;6592; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_6:6593; GFX90A:       ; %bb.0:6594; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6595; GFX90A-NEXT:    ;;#ASMSTART6596; GFX90A-NEXT:    ; def s[4:5]6597; GFX90A-NEXT:    ;;#ASMEND6598; GFX90A-NEXT:    ;;#ASMSTART6599; GFX90A-NEXT:    ; def s[6:7]6600; GFX90A-NEXT:    ;;#ASMEND6601; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s76602; GFX90A-NEXT:    ;;#ASMSTART6603; GFX90A-NEXT:    ; use s86604; GFX90A-NEXT:    ;;#ASMEND6605; GFX90A-NEXT:    s_setpc_b64 s[30:31]6606;6607; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_6:6608; GFX942:       ; %bb.0:6609; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6610; GFX942-NEXT:    ;;#ASMSTART6611; GFX942-NEXT:    ; def s[0:1]6612; GFX942-NEXT:    ;;#ASMEND6613; GFX942-NEXT:    ;;#ASMSTART6614; GFX942-NEXT:    ; def s[2:3]6615; GFX942-NEXT:    ;;#ASMEND6616; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s36617; GFX942-NEXT:    ;;#ASMSTART6618; GFX942-NEXT:    ; use s86619; GFX942-NEXT:    ;;#ASMEND6620; GFX942-NEXT:    s_setpc_b64 s[30:31]6621  %vec0 = call <4 x half> asm "; def $0", "=s"()6622  %vec1 = call <4 x half> asm "; def $0", "=s"()6623  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 6>6624  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6625  ret void6626}6627 6628define void @s_shuffle_v2f16_v4f16__1_6() {6629; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_6:6630; GFX900:       ; %bb.0:6631; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6632; GFX900-NEXT:    ;;#ASMSTART6633; GFX900-NEXT:    ; def s[4:5]6634; GFX900-NEXT:    ;;#ASMEND6635; GFX900-NEXT:    s_lshr_b32 s4, s4, 166636; GFX900-NEXT:    ;;#ASMSTART6637; GFX900-NEXT:    ; def s[6:7]6638; GFX900-NEXT:    ;;#ASMEND6639; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s76640; GFX900-NEXT:    ;;#ASMSTART6641; GFX900-NEXT:    ; use s86642; GFX900-NEXT:    ;;#ASMEND6643; GFX900-NEXT:    s_setpc_b64 s[30:31]6644;6645; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_6:6646; GFX90A:       ; %bb.0:6647; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6648; GFX90A-NEXT:    ;;#ASMSTART6649; GFX90A-NEXT:    ; def s[4:5]6650; GFX90A-NEXT:    ;;#ASMEND6651; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166652; GFX90A-NEXT:    ;;#ASMSTART6653; GFX90A-NEXT:    ; def s[6:7]6654; GFX90A-NEXT:    ;;#ASMEND6655; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s76656; GFX90A-NEXT:    ;;#ASMSTART6657; GFX90A-NEXT:    ; use s86658; GFX90A-NEXT:    ;;#ASMEND6659; GFX90A-NEXT:    s_setpc_b64 s[30:31]6660;6661; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_6:6662; GFX942:       ; %bb.0:6663; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6664; GFX942-NEXT:    ;;#ASMSTART6665; GFX942-NEXT:    ; def s[0:1]6666; GFX942-NEXT:    ;;#ASMEND6667; GFX942-NEXT:    s_lshr_b32 s0, s0, 166668; GFX942-NEXT:    ;;#ASMSTART6669; GFX942-NEXT:    ; def s[2:3]6670; GFX942-NEXT:    ;;#ASMEND6671; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s36672; GFX942-NEXT:    ;;#ASMSTART6673; GFX942-NEXT:    ; use s86674; GFX942-NEXT:    ;;#ASMEND6675; GFX942-NEXT:    s_setpc_b64 s[30:31]6676  %vec0 = call <4 x half> asm "; def $0", "=s"()6677  %vec1 = call <4 x half> asm "; def $0", "=s"()6678  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 6>6679  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6680  ret void6681}6682 6683define void @s_shuffle_v2f16_v4f16__2_6() {6684; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_6:6685; GFX900:       ; %bb.0:6686; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6687; GFX900-NEXT:    ;;#ASMSTART6688; GFX900-NEXT:    ; def s[4:5]6689; GFX900-NEXT:    ;;#ASMEND6690; GFX900-NEXT:    ;;#ASMSTART6691; GFX900-NEXT:    ; def s[6:7]6692; GFX900-NEXT:    ;;#ASMEND6693; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s76694; GFX900-NEXT:    ;;#ASMSTART6695; GFX900-NEXT:    ; use s86696; GFX900-NEXT:    ;;#ASMEND6697; GFX900-NEXT:    s_setpc_b64 s[30:31]6698;6699; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_6:6700; GFX90A:       ; %bb.0:6701; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6702; GFX90A-NEXT:    ;;#ASMSTART6703; GFX90A-NEXT:    ; def s[4:5]6704; GFX90A-NEXT:    ;;#ASMEND6705; GFX90A-NEXT:    ;;#ASMSTART6706; GFX90A-NEXT:    ; def s[6:7]6707; GFX90A-NEXT:    ;;#ASMEND6708; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s76709; GFX90A-NEXT:    ;;#ASMSTART6710; GFX90A-NEXT:    ; use s86711; GFX90A-NEXT:    ;;#ASMEND6712; GFX90A-NEXT:    s_setpc_b64 s[30:31]6713;6714; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_6:6715; GFX942:       ; %bb.0:6716; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6717; GFX942-NEXT:    ;;#ASMSTART6718; GFX942-NEXT:    ; def s[0:1]6719; GFX942-NEXT:    ;;#ASMEND6720; GFX942-NEXT:    ;;#ASMSTART6721; GFX942-NEXT:    ; def s[2:3]6722; GFX942-NEXT:    ;;#ASMEND6723; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s36724; GFX942-NEXT:    ;;#ASMSTART6725; GFX942-NEXT:    ; use s86726; GFX942-NEXT:    ;;#ASMEND6727; GFX942-NEXT:    s_setpc_b64 s[30:31]6728  %vec0 = call <4 x half> asm "; def $0", "=s"()6729  %vec1 = call <4 x half> asm "; def $0", "=s"()6730  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 6>6731  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6732  ret void6733}6734 6735define void @s_shuffle_v2f16_v4f16__3_6() {6736; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_6:6737; GFX900:       ; %bb.0:6738; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6739; GFX900-NEXT:    ;;#ASMSTART6740; GFX900-NEXT:    ; def s[4:5]6741; GFX900-NEXT:    ;;#ASMEND6742; GFX900-NEXT:    s_lshr_b32 s4, s5, 166743; GFX900-NEXT:    ;;#ASMSTART6744; GFX900-NEXT:    ; def s[6:7]6745; GFX900-NEXT:    ;;#ASMEND6746; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s76747; GFX900-NEXT:    ;;#ASMSTART6748; GFX900-NEXT:    ; use s86749; GFX900-NEXT:    ;;#ASMEND6750; GFX900-NEXT:    s_setpc_b64 s[30:31]6751;6752; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_6:6753; GFX90A:       ; %bb.0:6754; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6755; GFX90A-NEXT:    ;;#ASMSTART6756; GFX90A-NEXT:    ; def s[4:5]6757; GFX90A-NEXT:    ;;#ASMEND6758; GFX90A-NEXT:    s_lshr_b32 s4, s5, 166759; GFX90A-NEXT:    ;;#ASMSTART6760; GFX90A-NEXT:    ; def s[6:7]6761; GFX90A-NEXT:    ;;#ASMEND6762; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s76763; GFX90A-NEXT:    ;;#ASMSTART6764; GFX90A-NEXT:    ; use s86765; GFX90A-NEXT:    ;;#ASMEND6766; GFX90A-NEXT:    s_setpc_b64 s[30:31]6767;6768; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_6:6769; GFX942:       ; %bb.0:6770; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6771; GFX942-NEXT:    ;;#ASMSTART6772; GFX942-NEXT:    ; def s[0:1]6773; GFX942-NEXT:    ;;#ASMEND6774; GFX942-NEXT:    s_lshr_b32 s0, s1, 166775; GFX942-NEXT:    ;;#ASMSTART6776; GFX942-NEXT:    ; def s[2:3]6777; GFX942-NEXT:    ;;#ASMEND6778; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s36779; GFX942-NEXT:    ;;#ASMSTART6780; GFX942-NEXT:    ; use s86781; GFX942-NEXT:    ;;#ASMEND6782; GFX942-NEXT:    s_setpc_b64 s[30:31]6783  %vec0 = call <4 x half> asm "; def $0", "=s"()6784  %vec1 = call <4 x half> asm "; def $0", "=s"()6785  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 6>6786  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6787  ret void6788}6789 6790define void @s_shuffle_v2f16_v4f16__4_6() {6791; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_6:6792; GFX900:       ; %bb.0:6793; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6794; GFX900-NEXT:    ;;#ASMSTART6795; GFX900-NEXT:    ; def s[4:5]6796; GFX900-NEXT:    ;;#ASMEND6797; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s56798; GFX900-NEXT:    ;;#ASMSTART6799; GFX900-NEXT:    ; use s86800; GFX900-NEXT:    ;;#ASMEND6801; GFX900-NEXT:    s_setpc_b64 s[30:31]6802;6803; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_6:6804; GFX90A:       ; %bb.0:6805; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6806; GFX90A-NEXT:    ;;#ASMSTART6807; GFX90A-NEXT:    ; def s[4:5]6808; GFX90A-NEXT:    ;;#ASMEND6809; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s56810; GFX90A-NEXT:    ;;#ASMSTART6811; GFX90A-NEXT:    ; use s86812; GFX90A-NEXT:    ;;#ASMEND6813; GFX90A-NEXT:    s_setpc_b64 s[30:31]6814;6815; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_6:6816; GFX942:       ; %bb.0:6817; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6818; GFX942-NEXT:    ;;#ASMSTART6819; GFX942-NEXT:    ; def s[0:1]6820; GFX942-NEXT:    ;;#ASMEND6821; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s16822; GFX942-NEXT:    ;;#ASMSTART6823; GFX942-NEXT:    ; use s86824; GFX942-NEXT:    ;;#ASMEND6825; GFX942-NEXT:    s_setpc_b64 s[30:31]6826  %vec0 = call <4 x half> asm "; def $0", "=s"()6827  %vec1 = call <4 x half> asm "; def $0", "=s"()6828  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 6>6829  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6830  ret void6831}6832 6833define void @s_shuffle_v2f16_v4f16__5_6() {6834; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_6:6835; GFX900:       ; %bb.0:6836; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6837; GFX900-NEXT:    ;;#ASMSTART6838; GFX900-NEXT:    ; def s[4:5]6839; GFX900-NEXT:    ;;#ASMEND6840; GFX900-NEXT:    s_lshr_b32 s4, s4, 166841; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s56842; GFX900-NEXT:    ;;#ASMSTART6843; GFX900-NEXT:    ; use s86844; GFX900-NEXT:    ;;#ASMEND6845; GFX900-NEXT:    s_setpc_b64 s[30:31]6846;6847; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_6:6848; GFX90A:       ; %bb.0:6849; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6850; GFX90A-NEXT:    ;;#ASMSTART6851; GFX90A-NEXT:    ; def s[4:5]6852; GFX90A-NEXT:    ;;#ASMEND6853; GFX90A-NEXT:    s_lshr_b32 s4, s4, 166854; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s56855; GFX90A-NEXT:    ;;#ASMSTART6856; GFX90A-NEXT:    ; use s86857; GFX90A-NEXT:    ;;#ASMEND6858; GFX90A-NEXT:    s_setpc_b64 s[30:31]6859;6860; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_6:6861; GFX942:       ; %bb.0:6862; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6863; GFX942-NEXT:    ;;#ASMSTART6864; GFX942-NEXT:    ; def s[0:1]6865; GFX942-NEXT:    ;;#ASMEND6866; GFX942-NEXT:    s_lshr_b32 s0, s0, 166867; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s16868; GFX942-NEXT:    ;;#ASMSTART6869; GFX942-NEXT:    ; use s86870; GFX942-NEXT:    ;;#ASMEND6871; GFX942-NEXT:    s_setpc_b64 s[30:31]6872  %vec0 = call <4 x half> asm "; def $0", "=s"()6873  %vec1 = call <4 x half> asm "; def $0", "=s"()6874  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 6>6875  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6876  ret void6877}6878 6879define void @s_shuffle_v2f16_v4f16__6_6() {6880; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_6:6881; GFX900:       ; %bb.0:6882; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6883; GFX900-NEXT:    ;;#ASMSTART6884; GFX900-NEXT:    ; def s[4:5]6885; GFX900-NEXT:    ;;#ASMEND6886; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s56887; GFX900-NEXT:    ;;#ASMSTART6888; GFX900-NEXT:    ; use s86889; GFX900-NEXT:    ;;#ASMEND6890; GFX900-NEXT:    s_setpc_b64 s[30:31]6891;6892; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_6:6893; GFX90A:       ; %bb.0:6894; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6895; GFX90A-NEXT:    ;;#ASMSTART6896; GFX90A-NEXT:    ; def s[4:5]6897; GFX90A-NEXT:    ;;#ASMEND6898; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s56899; GFX90A-NEXT:    ;;#ASMSTART6900; GFX90A-NEXT:    ; use s86901; GFX90A-NEXT:    ;;#ASMEND6902; GFX90A-NEXT:    s_setpc_b64 s[30:31]6903;6904; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_6:6905; GFX942:       ; %bb.0:6906; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6907; GFX942-NEXT:    ;;#ASMSTART6908; GFX942-NEXT:    ; def s[0:1]6909; GFX942-NEXT:    ;;#ASMEND6910; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s16911; GFX942-NEXT:    ;;#ASMSTART6912; GFX942-NEXT:    ; use s86913; GFX942-NEXT:    ;;#ASMEND6914; GFX942-NEXT:    s_setpc_b64 s[30:31]6915  %vec0 = call <4 x half> asm "; def $0", "=s"()6916  %vec1 = call <4 x half> asm "; def $0", "=s"()6917  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 6>6918  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6919  ret void6920}6921 6922define void @s_shuffle_v2f16_v4f16__u_7() {6923; GFX900-LABEL: s_shuffle_v2f16_v4f16__u_7:6924; GFX900:       ; %bb.0:6925; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6926; GFX900-NEXT:    ;;#ASMSTART6927; GFX900-NEXT:    ; def s[4:5]6928; GFX900-NEXT:    ;;#ASMEND6929; GFX900-NEXT:    s_mov_b32 s8, s56930; GFX900-NEXT:    ;;#ASMSTART6931; GFX900-NEXT:    ; use s86932; GFX900-NEXT:    ;;#ASMEND6933; GFX900-NEXT:    s_setpc_b64 s[30:31]6934;6935; GFX90A-LABEL: s_shuffle_v2f16_v4f16__u_7:6936; GFX90A:       ; %bb.0:6937; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6938; GFX90A-NEXT:    ;;#ASMSTART6939; GFX90A-NEXT:    ; def s[4:5]6940; GFX90A-NEXT:    ;;#ASMEND6941; GFX90A-NEXT:    s_mov_b32 s8, s56942; GFX90A-NEXT:    ;;#ASMSTART6943; GFX90A-NEXT:    ; use s86944; GFX90A-NEXT:    ;;#ASMEND6945; GFX90A-NEXT:    s_setpc_b64 s[30:31]6946;6947; GFX942-LABEL: s_shuffle_v2f16_v4f16__u_7:6948; GFX942:       ; %bb.0:6949; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6950; GFX942-NEXT:    ;;#ASMSTART6951; GFX942-NEXT:    ; def s[0:1]6952; GFX942-NEXT:    ;;#ASMEND6953; GFX942-NEXT:    s_mov_b32 s8, s16954; GFX942-NEXT:    ;;#ASMSTART6955; GFX942-NEXT:    ; use s86956; GFX942-NEXT:    ;;#ASMEND6957; GFX942-NEXT:    s_setpc_b64 s[30:31]6958  %vec0 = call <4 x half> asm "; def $0", "=s"()6959  %vec1 = call <4 x half> asm "; def $0", "=s"()6960  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 poison, i32 7>6961  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)6962  ret void6963}6964 6965define void @s_shuffle_v2f16_v4f16__0_7() {6966; GFX900-LABEL: s_shuffle_v2f16_v4f16__0_7:6967; GFX900:       ; %bb.0:6968; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6969; GFX900-NEXT:    ;;#ASMSTART6970; GFX900-NEXT:    ; def s[4:5]6971; GFX900-NEXT:    ;;#ASMEND6972; GFX900-NEXT:    ;;#ASMSTART6973; GFX900-NEXT:    ; def s[6:7]6974; GFX900-NEXT:    ;;#ASMEND6975; GFX900-NEXT:    s_lshr_b32 s5, s7, 166976; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s56977; GFX900-NEXT:    ;;#ASMSTART6978; GFX900-NEXT:    ; use s86979; GFX900-NEXT:    ;;#ASMEND6980; GFX900-NEXT:    s_setpc_b64 s[30:31]6981;6982; GFX90A-LABEL: s_shuffle_v2f16_v4f16__0_7:6983; GFX90A:       ; %bb.0:6984; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6985; GFX90A-NEXT:    ;;#ASMSTART6986; GFX90A-NEXT:    ; def s[4:5]6987; GFX90A-NEXT:    ;;#ASMEND6988; GFX90A-NEXT:    ;;#ASMSTART6989; GFX90A-NEXT:    ; def s[6:7]6990; GFX90A-NEXT:    ;;#ASMEND6991; GFX90A-NEXT:    s_lshr_b32 s5, s7, 166992; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s56993; GFX90A-NEXT:    ;;#ASMSTART6994; GFX90A-NEXT:    ; use s86995; GFX90A-NEXT:    ;;#ASMEND6996; GFX90A-NEXT:    s_setpc_b64 s[30:31]6997;6998; GFX942-LABEL: s_shuffle_v2f16_v4f16__0_7:6999; GFX942:       ; %bb.0:7000; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7001; GFX942-NEXT:    ;;#ASMSTART7002; GFX942-NEXT:    ; def s[0:1]7003; GFX942-NEXT:    ;;#ASMEND7004; GFX942-NEXT:    ;;#ASMSTART7005; GFX942-NEXT:    ; def s[2:3]7006; GFX942-NEXT:    ;;#ASMEND7007; GFX942-NEXT:    s_lshr_b32 s1, s3, 167008; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s17009; GFX942-NEXT:    ;;#ASMSTART7010; GFX942-NEXT:    ; use s87011; GFX942-NEXT:    ;;#ASMEND7012; GFX942-NEXT:    s_setpc_b64 s[30:31]7013  %vec0 = call <4 x half> asm "; def $0", "=s"()7014  %vec1 = call <4 x half> asm "; def $0", "=s"()7015  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 0, i32 7>7016  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7017  ret void7018}7019 7020define void @s_shuffle_v2f16_v4f16__1_7() {7021; GFX900-LABEL: s_shuffle_v2f16_v4f16__1_7:7022; GFX900:       ; %bb.0:7023; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7024; GFX900-NEXT:    ;;#ASMSTART7025; GFX900-NEXT:    ; def s[4:5]7026; GFX900-NEXT:    ;;#ASMEND7027; GFX900-NEXT:    ;;#ASMSTART7028; GFX900-NEXT:    ; def s[6:7]7029; GFX900-NEXT:    ;;#ASMEND7030; GFX900-NEXT:    s_lshr_b32 s5, s7, 167031; GFX900-NEXT:    s_lshr_b32 s4, s4, 167032; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s57033; GFX900-NEXT:    ;;#ASMSTART7034; GFX900-NEXT:    ; use s87035; GFX900-NEXT:    ;;#ASMEND7036; GFX900-NEXT:    s_setpc_b64 s[30:31]7037;7038; GFX90A-LABEL: s_shuffle_v2f16_v4f16__1_7:7039; GFX90A:       ; %bb.0:7040; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7041; GFX90A-NEXT:    ;;#ASMSTART7042; GFX90A-NEXT:    ; def s[4:5]7043; GFX90A-NEXT:    ;;#ASMEND7044; GFX90A-NEXT:    ;;#ASMSTART7045; GFX90A-NEXT:    ; def s[6:7]7046; GFX90A-NEXT:    ;;#ASMEND7047; GFX90A-NEXT:    s_lshr_b32 s5, s7, 167048; GFX90A-NEXT:    s_lshr_b32 s4, s4, 167049; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s57050; GFX90A-NEXT:    ;;#ASMSTART7051; GFX90A-NEXT:    ; use s87052; GFX90A-NEXT:    ;;#ASMEND7053; GFX90A-NEXT:    s_setpc_b64 s[30:31]7054;7055; GFX942-LABEL: s_shuffle_v2f16_v4f16__1_7:7056; GFX942:       ; %bb.0:7057; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7058; GFX942-NEXT:    ;;#ASMSTART7059; GFX942-NEXT:    ; def s[0:1]7060; GFX942-NEXT:    ;;#ASMEND7061; GFX942-NEXT:    ;;#ASMSTART7062; GFX942-NEXT:    ; def s[2:3]7063; GFX942-NEXT:    ;;#ASMEND7064; GFX942-NEXT:    s_lshr_b32 s1, s3, 167065; GFX942-NEXT:    s_lshr_b32 s0, s0, 167066; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s17067; GFX942-NEXT:    ;;#ASMSTART7068; GFX942-NEXT:    ; use s87069; GFX942-NEXT:    ;;#ASMEND7070; GFX942-NEXT:    s_setpc_b64 s[30:31]7071  %vec0 = call <4 x half> asm "; def $0", "=s"()7072  %vec1 = call <4 x half> asm "; def $0", "=s"()7073  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 1, i32 7>7074  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7075  ret void7076}7077 7078define void @s_shuffle_v2f16_v4f16__2_7() {7079; GFX900-LABEL: s_shuffle_v2f16_v4f16__2_7:7080; GFX900:       ; %bb.0:7081; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7082; GFX900-NEXT:    ;;#ASMSTART7083; GFX900-NEXT:    ; def s[4:5]7084; GFX900-NEXT:    ;;#ASMEND7085; GFX900-NEXT:    ;;#ASMSTART7086; GFX900-NEXT:    ; def s[6:7]7087; GFX900-NEXT:    ;;#ASMEND7088; GFX900-NEXT:    s_lshr_b32 s4, s7, 167089; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s47090; GFX900-NEXT:    ;;#ASMSTART7091; GFX900-NEXT:    ; use s87092; GFX900-NEXT:    ;;#ASMEND7093; GFX900-NEXT:    s_setpc_b64 s[30:31]7094;7095; GFX90A-LABEL: s_shuffle_v2f16_v4f16__2_7:7096; GFX90A:       ; %bb.0:7097; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7098; GFX90A-NEXT:    ;;#ASMSTART7099; GFX90A-NEXT:    ; def s[4:5]7100; GFX90A-NEXT:    ;;#ASMEND7101; GFX90A-NEXT:    ;;#ASMSTART7102; GFX90A-NEXT:    ; def s[6:7]7103; GFX90A-NEXT:    ;;#ASMEND7104; GFX90A-NEXT:    s_lshr_b32 s4, s7, 167105; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s47106; GFX90A-NEXT:    ;;#ASMSTART7107; GFX90A-NEXT:    ; use s87108; GFX90A-NEXT:    ;;#ASMEND7109; GFX90A-NEXT:    s_setpc_b64 s[30:31]7110;7111; GFX942-LABEL: s_shuffle_v2f16_v4f16__2_7:7112; GFX942:       ; %bb.0:7113; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7114; GFX942-NEXT:    ;;#ASMSTART7115; GFX942-NEXT:    ; def s[0:1]7116; GFX942-NEXT:    ;;#ASMEND7117; GFX942-NEXT:    ;;#ASMSTART7118; GFX942-NEXT:    ; def s[2:3]7119; GFX942-NEXT:    ;;#ASMEND7120; GFX942-NEXT:    s_lshr_b32 s0, s3, 167121; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s07122; GFX942-NEXT:    ;;#ASMSTART7123; GFX942-NEXT:    ; use s87124; GFX942-NEXT:    ;;#ASMEND7125; GFX942-NEXT:    s_setpc_b64 s[30:31]7126  %vec0 = call <4 x half> asm "; def $0", "=s"()7127  %vec1 = call <4 x half> asm "; def $0", "=s"()7128  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 2, i32 7>7129  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7130  ret void7131}7132 7133define void @s_shuffle_v2f16_v4f16__3_7() {7134; GFX900-LABEL: s_shuffle_v2f16_v4f16__3_7:7135; GFX900:       ; %bb.0:7136; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7137; GFX900-NEXT:    ;;#ASMSTART7138; GFX900-NEXT:    ; def s[4:5]7139; GFX900-NEXT:    ;;#ASMEND7140; GFX900-NEXT:    ;;#ASMSTART7141; GFX900-NEXT:    ; def s[6:7]7142; GFX900-NEXT:    ;;#ASMEND7143; GFX900-NEXT:    s_lshr_b32 s4, s7, 167144; GFX900-NEXT:    s_lshr_b32 s5, s5, 167145; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s47146; GFX900-NEXT:    ;;#ASMSTART7147; GFX900-NEXT:    ; use s87148; GFX900-NEXT:    ;;#ASMEND7149; GFX900-NEXT:    s_setpc_b64 s[30:31]7150;7151; GFX90A-LABEL: s_shuffle_v2f16_v4f16__3_7:7152; GFX90A:       ; %bb.0:7153; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7154; GFX90A-NEXT:    ;;#ASMSTART7155; GFX90A-NEXT:    ; def s[4:5]7156; GFX90A-NEXT:    ;;#ASMEND7157; GFX90A-NEXT:    ;;#ASMSTART7158; GFX90A-NEXT:    ; def s[6:7]7159; GFX90A-NEXT:    ;;#ASMEND7160; GFX90A-NEXT:    s_lshr_b32 s4, s7, 167161; GFX90A-NEXT:    s_lshr_b32 s5, s5, 167162; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s47163; GFX90A-NEXT:    ;;#ASMSTART7164; GFX90A-NEXT:    ; use s87165; GFX90A-NEXT:    ;;#ASMEND7166; GFX90A-NEXT:    s_setpc_b64 s[30:31]7167;7168; GFX942-LABEL: s_shuffle_v2f16_v4f16__3_7:7169; GFX942:       ; %bb.0:7170; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7171; GFX942-NEXT:    ;;#ASMSTART7172; GFX942-NEXT:    ; def s[0:1]7173; GFX942-NEXT:    ;;#ASMEND7174; GFX942-NEXT:    ;;#ASMSTART7175; GFX942-NEXT:    ; def s[2:3]7176; GFX942-NEXT:    ;;#ASMEND7177; GFX942-NEXT:    s_lshr_b32 s0, s3, 167178; GFX942-NEXT:    s_lshr_b32 s1, s1, 167179; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s1, s07180; GFX942-NEXT:    ;;#ASMSTART7181; GFX942-NEXT:    ; use s87182; GFX942-NEXT:    ;;#ASMEND7183; GFX942-NEXT:    s_setpc_b64 s[30:31]7184  %vec0 = call <4 x half> asm "; def $0", "=s"()7185  %vec1 = call <4 x half> asm "; def $0", "=s"()7186  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 3, i32 7>7187  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7188  ret void7189}7190 7191define void @s_shuffle_v2f16_v4f16__4_7() {7192; GFX900-LABEL: s_shuffle_v2f16_v4f16__4_7:7193; GFX900:       ; %bb.0:7194; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7195; GFX900-NEXT:    ;;#ASMSTART7196; GFX900-NEXT:    ; def s[4:5]7197; GFX900-NEXT:    ;;#ASMEND7198; GFX900-NEXT:    s_lshr_b32 s5, s5, 167199; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s57200; GFX900-NEXT:    ;;#ASMSTART7201; GFX900-NEXT:    ; use s87202; GFX900-NEXT:    ;;#ASMEND7203; GFX900-NEXT:    s_setpc_b64 s[30:31]7204;7205; GFX90A-LABEL: s_shuffle_v2f16_v4f16__4_7:7206; GFX90A:       ; %bb.0:7207; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7208; GFX90A-NEXT:    ;;#ASMSTART7209; GFX90A-NEXT:    ; def s[4:5]7210; GFX90A-NEXT:    ;;#ASMEND7211; GFX90A-NEXT:    s_lshr_b32 s5, s5, 167212; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s57213; GFX90A-NEXT:    ;;#ASMSTART7214; GFX90A-NEXT:    ; use s87215; GFX90A-NEXT:    ;;#ASMEND7216; GFX90A-NEXT:    s_setpc_b64 s[30:31]7217;7218; GFX942-LABEL: s_shuffle_v2f16_v4f16__4_7:7219; GFX942:       ; %bb.0:7220; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7221; GFX942-NEXT:    ;;#ASMSTART7222; GFX942-NEXT:    ; def s[0:1]7223; GFX942-NEXT:    ;;#ASMEND7224; GFX942-NEXT:    s_lshr_b32 s1, s1, 167225; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s17226; GFX942-NEXT:    ;;#ASMSTART7227; GFX942-NEXT:    ; use s87228; GFX942-NEXT:    ;;#ASMEND7229; GFX942-NEXT:    s_setpc_b64 s[30:31]7230  %vec0 = call <4 x half> asm "; def $0", "=s"()7231  %vec1 = call <4 x half> asm "; def $0", "=s"()7232  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 4, i32 7>7233  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7234  ret void7235}7236 7237define void @s_shuffle_v2f16_v4f16__5_7() {7238; GFX900-LABEL: s_shuffle_v2f16_v4f16__5_7:7239; GFX900:       ; %bb.0:7240; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7241; GFX900-NEXT:    ;;#ASMSTART7242; GFX900-NEXT:    ; def s[4:5]7243; GFX900-NEXT:    ;;#ASMEND7244; GFX900-NEXT:    s_lshr_b32 s5, s5, 167245; GFX900-NEXT:    s_lshr_b32 s4, s4, 167246; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s57247; GFX900-NEXT:    ;;#ASMSTART7248; GFX900-NEXT:    ; use s87249; GFX900-NEXT:    ;;#ASMEND7250; GFX900-NEXT:    s_setpc_b64 s[30:31]7251;7252; GFX90A-LABEL: s_shuffle_v2f16_v4f16__5_7:7253; GFX90A:       ; %bb.0:7254; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7255; GFX90A-NEXT:    ;;#ASMSTART7256; GFX90A-NEXT:    ; def s[4:5]7257; GFX90A-NEXT:    ;;#ASMEND7258; GFX90A-NEXT:    s_lshr_b32 s5, s5, 167259; GFX90A-NEXT:    s_lshr_b32 s4, s4, 167260; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s57261; GFX90A-NEXT:    ;;#ASMSTART7262; GFX90A-NEXT:    ; use s87263; GFX90A-NEXT:    ;;#ASMEND7264; GFX90A-NEXT:    s_setpc_b64 s[30:31]7265;7266; GFX942-LABEL: s_shuffle_v2f16_v4f16__5_7:7267; GFX942:       ; %bb.0:7268; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7269; GFX942-NEXT:    ;;#ASMSTART7270; GFX942-NEXT:    ; def s[0:1]7271; GFX942-NEXT:    ;;#ASMEND7272; GFX942-NEXT:    s_lshr_b32 s1, s1, 167273; GFX942-NEXT:    s_lshr_b32 s0, s0, 167274; GFX942-NEXT:    s_pack_ll_b32_b16 s8, s0, s17275; GFX942-NEXT:    ;;#ASMSTART7276; GFX942-NEXT:    ; use s87277; GFX942-NEXT:    ;;#ASMEND7278; GFX942-NEXT:    s_setpc_b64 s[30:31]7279  %vec0 = call <4 x half> asm "; def $0", "=s"()7280  %vec1 = call <4 x half> asm "; def $0", "=s"()7281  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 5, i32 7>7282  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7283  ret void7284}7285 7286define void @s_shuffle_v2f16_v4f16__6_7() {7287; GFX900-LABEL: s_shuffle_v2f16_v4f16__6_7:7288; GFX900:       ; %bb.0:7289; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7290; GFX900-NEXT:    ;;#ASMSTART7291; GFX900-NEXT:    ; def s[4:5]7292; GFX900-NEXT:    ;;#ASMEND7293; GFX900-NEXT:    s_mov_b32 s8, s57294; GFX900-NEXT:    ;;#ASMSTART7295; GFX900-NEXT:    ; use s87296; GFX900-NEXT:    ;;#ASMEND7297; GFX900-NEXT:    s_setpc_b64 s[30:31]7298;7299; GFX90A-LABEL: s_shuffle_v2f16_v4f16__6_7:7300; GFX90A:       ; %bb.0:7301; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7302; GFX90A-NEXT:    ;;#ASMSTART7303; GFX90A-NEXT:    ; def s[4:5]7304; GFX90A-NEXT:    ;;#ASMEND7305; GFX90A-NEXT:    s_mov_b32 s8, s57306; GFX90A-NEXT:    ;;#ASMSTART7307; GFX90A-NEXT:    ; use s87308; GFX90A-NEXT:    ;;#ASMEND7309; GFX90A-NEXT:    s_setpc_b64 s[30:31]7310;7311; GFX942-LABEL: s_shuffle_v2f16_v4f16__6_7:7312; GFX942:       ; %bb.0:7313; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7314; GFX942-NEXT:    ;;#ASMSTART7315; GFX942-NEXT:    ; def s[0:1]7316; GFX942-NEXT:    ;;#ASMEND7317; GFX942-NEXT:    s_mov_b32 s8, s17318; GFX942-NEXT:    ;;#ASMSTART7319; GFX942-NEXT:    ; use s87320; GFX942-NEXT:    ;;#ASMEND7321; GFX942-NEXT:    s_setpc_b64 s[30:31]7322  %vec0 = call <4 x half> asm "; def $0", "=s"()7323  %vec1 = call <4 x half> asm "; def $0", "=s"()7324  %shuf = shufflevector <4 x half> %vec0, <4 x half> %vec1, <2 x i32> <i32 6, i32 7>7325  call void asm sideeffect "; use $0", "{s8}"(<2 x half> %shuf)7326  ret void7327}7328;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:7329; GFX90APLUS: {{.*}}7330