xref: /llvm-project/llvm/test/CodeGen/AMDGPU/shufflevector.v4i16.v2i16.ll (revision 585858aeb6247b3892218edb9d353c63f1c33186)
17786266dSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
27786266dSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s
37786266dSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s
47786266dSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX940 %s
57786266dSMatt Arsenault
67786266dSMatt Arsenault
77786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__u_u_u_u(ptr addrspace(1) inreg %ptr) {
87786266dSMatt Arsenault; GFX9-LABEL: v_shuffle_v4i16_v2i16__u_u_u_u:
97786266dSMatt Arsenault; GFX9:       ; %bb.0:
107786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
127786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
137786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> poison
147786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
157786266dSMatt Arsenault  ret void
167786266dSMatt Arsenault}
177786266dSMatt Arsenault
187786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__0_u_u_u(ptr addrspace(1) inreg %ptr) {
197786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__0_u_u_u:
207786266dSMatt Arsenault; GFX900:       ; %bb.0:
217786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
227786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
237786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
247786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
257786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
267786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
277786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
287786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
297786266dSMatt Arsenault;
307786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__0_u_u_u:
317786266dSMatt Arsenault; GFX90A:       ; %bb.0:
327786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
337786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
347786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
357786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
367786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
377786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
387786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
397786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
407786266dSMatt Arsenault;
417786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__0_u_u_u:
427786266dSMatt Arsenault; GFX940:       ; %bb.0:
437786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
447786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
457786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
467786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
477786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
487786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
497786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
507786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
517786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
527786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
537786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
547786266dSMatt Arsenault  ret void
557786266dSMatt Arsenault}
567786266dSMatt Arsenault
577786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__1_u_u_u(ptr addrspace(1) inreg %ptr) {
587786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__1_u_u_u:
597786266dSMatt Arsenault; GFX900:       ; %bb.0:
607786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
617786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
627786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
637786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
647786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
657786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
667786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
677786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
687786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
697786266dSMatt Arsenault;
707786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__1_u_u_u:
717786266dSMatt Arsenault; GFX90A:       ; %bb.0:
727786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
737786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
747786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
757786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
767786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
777786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
787786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
797786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
807786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
817786266dSMatt Arsenault;
827786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__1_u_u_u:
837786266dSMatt Arsenault; GFX940:       ; %bb.0:
847786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
857786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
867786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
877786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
887786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
897786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
907786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
917786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
927786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
937786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
947786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>
957786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
967786266dSMatt Arsenault  ret void
977786266dSMatt Arsenault}
987786266dSMatt Arsenault
997786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__2_u_u_u(ptr addrspace(1) inreg %ptr) {
1007786266dSMatt Arsenault; GFX9-LABEL: v_shuffle_v4i16_v2i16__2_u_u_u:
1017786266dSMatt Arsenault; GFX9:       ; %bb.0:
1027786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1037786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1047786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
1057786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>
1067786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1077786266dSMatt Arsenault  ret void
1087786266dSMatt Arsenault}
1097786266dSMatt Arsenault
1107786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_u_u_u(ptr addrspace(1) inreg %ptr) {
1117786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_u_u_u:
1127786266dSMatt Arsenault; GFX900:       ; %bb.0:
1137786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1147786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
1157786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
1167786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
1177786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
1187786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
1197786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
1207786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
1217786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
1227786266dSMatt Arsenault;
1237786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_u_u_u:
1247786266dSMatt Arsenault; GFX90A:       ; %bb.0:
1257786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1267786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
1277786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
1287786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
1297786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
1307786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
1317786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
1327786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1337786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1347786266dSMatt Arsenault;
1357786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_u_u_u:
1367786266dSMatt Arsenault; GFX940:       ; %bb.0:
1377786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
1397786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
1407786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
1417786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
1427786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
1437786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
1447786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
1457786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
1467786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
1477786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
1487786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>
1497786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1507786266dSMatt Arsenault  ret void
1517786266dSMatt Arsenault}
1527786266dSMatt Arsenault
1537786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_0_u_u(ptr addrspace(1) inreg %ptr) {
1547786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_0_u_u:
1557786266dSMatt Arsenault; GFX900:       ; %bb.0:
1567786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
1587786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
1597786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
1607786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
1617786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
1627786266dSMatt Arsenault; GFX900-NEXT:    ; def v2
1637786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
1647786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v2, 16
1657786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
1667786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
1677786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
1687786266dSMatt Arsenault;
1697786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_0_u_u:
1707786266dSMatt Arsenault; GFX90A:       ; %bb.0:
1717786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
1737786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
1747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
1757786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
1767786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
1777786266dSMatt Arsenault; GFX90A-NEXT:    ; def v2
1787786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
1797786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v2, 16
1807786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
1817786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1827786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1837786266dSMatt Arsenault;
1847786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_0_u_u:
1857786266dSMatt Arsenault; GFX940:       ; %bb.0:
1867786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1877786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
1887786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
1897786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
1907786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
1917786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
1927786266dSMatt Arsenault; GFX940-NEXT:    ; def v2
1937786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
1947786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
1957786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v2, 16
1967786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
1977786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
1987786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
1997786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
2007786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
2017786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>
2027786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
2037786266dSMatt Arsenault  ret void
2047786266dSMatt Arsenault}
2057786266dSMatt Arsenault
2067786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_1_u_u(ptr addrspace(1) inreg %ptr) {
2077786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_1_u_u:
2087786266dSMatt Arsenault; GFX900:       ; %bb.0:
2097786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
2117786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
2127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
2137786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
2147786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
2157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
2167786266dSMatt Arsenault; GFX900-NEXT:    ; def v2
2177786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
2187786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s4
2197786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
2207786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
2217786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
2227786266dSMatt Arsenault;
2237786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_1_u_u:
2247786266dSMatt Arsenault; GFX90A:       ; %bb.0:
2257786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2267786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
2277786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
2287786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
2297786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
2307786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
2317786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
2327786266dSMatt Arsenault; GFX90A-NEXT:    ; def v2
2337786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
2347786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v2, s4
2357786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
2367786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2377786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2387786266dSMatt Arsenault;
2397786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_1_u_u:
2407786266dSMatt Arsenault; GFX940:       ; %bb.0:
2417786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2427786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
2437786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
2447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
2457786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
2467786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
2477786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
2487786266dSMatt Arsenault; GFX940-NEXT:    ; def v2
2497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
2507786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
2517786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v2, s2
2527786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
2537786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
2547786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
2557786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
2567786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
2577786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>
2587786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
2597786266dSMatt Arsenault  ret void
2607786266dSMatt Arsenault}
2617786266dSMatt Arsenault
2627786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_2_u_u(ptr addrspace(1) inreg %ptr) {
2637786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_2_u_u:
2647786266dSMatt Arsenault; GFX900:       ; %bb.0:
2657786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2667786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
2677786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
2687786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
2697786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
2707786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
2717786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
2727786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
2737786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
2747786266dSMatt Arsenault;
2757786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_2_u_u:
2767786266dSMatt Arsenault; GFX90A:       ; %bb.0:
2777786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2787786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
2797786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
2807786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
2817786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
2827786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
2837786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
2847786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2857786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2867786266dSMatt Arsenault;
2877786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_2_u_u:
2887786266dSMatt Arsenault; GFX940:       ; %bb.0:
2897786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
2917786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
2927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
2937786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
2947786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
2957786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
2967786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
2977786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
2987786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
2997786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
3007786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>
3017786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
3027786266dSMatt Arsenault  ret void
3037786266dSMatt Arsenault}
3047786266dSMatt Arsenault
3057786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_u_u(ptr addrspace(1) inreg %ptr) {
3067786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_u_u:
3077786266dSMatt Arsenault; GFX900:       ; %bb.0:
3087786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3097786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3107786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
3117786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3127786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
3137786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
3147786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
3157786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
3167786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
3177786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
3187786266dSMatt Arsenault;
3197786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_u_u:
3207786266dSMatt Arsenault; GFX90A:       ; %bb.0:
3217786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3227786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3237786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
3247786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3257786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
3267786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
3277786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
3287786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
3297786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3307786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3317786266dSMatt Arsenault;
3327786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_u_u:
3337786266dSMatt Arsenault; GFX940:       ; %bb.0:
3347786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3357786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3367786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
3377786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3387786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
3397786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
3407786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
3417786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
3427786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
3437786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
3447786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
3457786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
3467786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
3477786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
3487786266dSMatt Arsenault  ret void
3497786266dSMatt Arsenault}
3507786266dSMatt Arsenault
3517786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_0_u(ptr addrspace(1) inreg %ptr) {
3527786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_0_u:
3537786266dSMatt Arsenault; GFX900:       ; %bb.0:
3547786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3557786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3567786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
3577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3587786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
3597786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
3607786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
3617786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3627786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
3637786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3647786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
3657786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
3667786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
3677786266dSMatt Arsenault;
3687786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_0_u:
3697786266dSMatt Arsenault; GFX90A:       ; %bb.0:
3707786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3717786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3727786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
3737786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3747786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
3757786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
3767786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
3777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3787786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
3797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3807786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
3817786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3827786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3837786266dSMatt Arsenault;
3847786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_0_u:
3857786266dSMatt Arsenault; GFX940:       ; %bb.0:
3867786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3877786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3887786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
3897786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3907786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
3917786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
3927786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
3937786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3947786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
3957786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3967786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
3977786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
3987786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
3997786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
4007786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
4017786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
4027786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
4037786266dSMatt Arsenault  ret void
4047786266dSMatt Arsenault}
4057786266dSMatt Arsenault
4067786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_1_u(ptr addrspace(1) inreg %ptr) {
4077786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_1_u:
4087786266dSMatt Arsenault; GFX900:       ; %bb.0:
4097786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4117786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
4127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4137786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, s4, v0, 16
4147786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
4157786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
4167786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4177786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
4187786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4197786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
4207786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
4217786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
4227786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
4237786266dSMatt Arsenault;
4247786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_1_u:
4257786266dSMatt Arsenault; GFX90A:       ; %bb.0:
4267786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4287786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
4297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4307786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, s4, v0, 16
4317786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
4327786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
4337786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4347786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
4357786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4367786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
4377786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
4387786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4397786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4407786266dSMatt Arsenault;
4417786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_1_u:
4427786266dSMatt Arsenault; GFX940:       ; %bb.0:
4437786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4457786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
4467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4477786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
4487786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
4497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4507786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
4517786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4527786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, s0, v0, 16
4537786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
4547786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
4557786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
4567786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
4577786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
4587786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
4597786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>
4607786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
4617786266dSMatt Arsenault  ret void
4627786266dSMatt Arsenault}
4637786266dSMatt Arsenault
4647786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_2_u(ptr addrspace(1) inreg %ptr) {
4657786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_2_u:
4667786266dSMatt Arsenault; GFX900:       ; %bb.0:
4677786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4687786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
4697786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
4707786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4717786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
4727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4737786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
4747786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
4757786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
4767786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
4777786266dSMatt Arsenault;
4787786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_2_u:
4797786266dSMatt Arsenault; GFX90A:       ; %bb.0:
4807786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4817786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
4827786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
4837786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4847786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
4857786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4867786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
4877786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
4887786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4897786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4907786266dSMatt Arsenault;
4917786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_2_u:
4927786266dSMatt Arsenault; GFX940:       ; %bb.0:
4937786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4947786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
4957786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
4967786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4977786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
4987786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4997786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
5007786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
5017786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
5027786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
5037786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
5047786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
5057786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
5067786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
5077786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
5087786266dSMatt Arsenault  ret void
5097786266dSMatt Arsenault}
5107786266dSMatt Arsenault
5117786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_3_u(ptr addrspace(1) inreg %ptr) {
5127786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_3_u:
5137786266dSMatt Arsenault; GFX900:       ; %bb.0:
5147786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5167786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
5177786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5187786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, s4, v0, 16
5197786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
5207786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
5217786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
5227786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
5237786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
5247786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
5257786266dSMatt Arsenault;
5267786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_3_u:
5277786266dSMatt Arsenault; GFX90A:       ; %bb.0:
5287786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5307786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
5317786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5327786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, s4, v0, 16
5337786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
5347786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
5357786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
5367786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
5377786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5387786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5397786266dSMatt Arsenault;
5407786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_3_u:
5417786266dSMatt Arsenault; GFX940:       ; %bb.0:
5427786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5437786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5447786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
5457786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5467786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
5477786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
5487786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, s0, v0, 16
5497786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
5507786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
5517786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
5527786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
5537786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
5547786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
5557786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
5567786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
5577786266dSMatt Arsenault  ret void
5587786266dSMatt Arsenault}
5597786266dSMatt Arsenault
5607786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_3_0(ptr addrspace(1) inreg %ptr) {
5617786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_3_0:
5627786266dSMatt Arsenault; GFX900:       ; %bb.0:
5637786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5647786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5657786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
5667786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5677786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
5687786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
5697786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5707786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
5717786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5727786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
5737786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, v1, v3, 16
5747786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
5757786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
5767786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
5777786266dSMatt Arsenault;
5787786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_3_0:
5797786266dSMatt Arsenault; GFX90A:       ; %bb.0:
5807786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5817786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5827786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
5837786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5847786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
5857786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
5867786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5877786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
5887786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5897786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
5907786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v3, 16
5917786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
5927786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5937786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5947786266dSMatt Arsenault;
5957786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_3_0:
5967786266dSMatt Arsenault; GFX940:       ; %bb.0:
5977786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5987786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5997786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
6007786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6017786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
6027786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
6037786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6047786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
6057786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6067786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
6077786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
6087786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, v1, v3, 16
6097786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
6107786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
6117786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
6127786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
6137786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
6147786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
6157786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
6167786266dSMatt Arsenault  ret void
6177786266dSMatt Arsenault}
6187786266dSMatt Arsenault
6197786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_3_1(ptr addrspace(1) inreg %ptr) {
6207786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_3_1:
6217786266dSMatt Arsenault; GFX900:       ; %bb.0:
6227786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6237786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6247786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
6257786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
6267786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
6277786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
6287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6297786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
6307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
6317786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v3, s4
6327786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
6337786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
6347786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
6357786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
6367786266dSMatt Arsenault;
6377786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_3_1:
6387786266dSMatt Arsenault; GFX90A:       ; %bb.0:
6397786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6407786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6417786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
6427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
6437786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
6447786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
6457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6467786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
6477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
6487786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v3, s4
6497786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
6507786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
6517786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
6527786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6537786266dSMatt Arsenault;
6547786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_3_1:
6557786266dSMatt Arsenault; GFX940:       ; %bb.0:
6567786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6577786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6587786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
6597786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6607786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
6617786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
6627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6637786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
6647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6657786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
6667786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v3, s2
6677786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
6687786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
6697786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
6707786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
6717786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
6727786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
6737786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
6747786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
6757786266dSMatt Arsenault  ret void
6767786266dSMatt Arsenault}
6777786266dSMatt Arsenault
6787786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_3_2(ptr addrspace(1) inreg %ptr) {
6797786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_3_2:
6807786266dSMatt Arsenault; GFX900:       ; %bb.0:
6817786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6837786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
6847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
6857786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
6867786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
6877786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
6887786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, v1, v1, 16
6897786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
6907786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
6917786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
6927786266dSMatt Arsenault;
6937786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_3_2:
6947786266dSMatt Arsenault; GFX90A:       ; %bb.0:
6957786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6967786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6977786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
6987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
6997786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
7007786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
7017786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
7027786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v1, 16
7037786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
7047786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7057786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
7067786266dSMatt Arsenault;
7077786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_3_2:
7087786266dSMatt Arsenault; GFX940:       ; %bb.0:
7097786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
7117786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
7127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
7137786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
7147786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
7157786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
7167786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, v1, v1, 16
7177786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
7187786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
7197786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
7207786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
7217786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
7227786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>
7237786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
7247786266dSMatt Arsenault  ret void
7257786266dSMatt Arsenault}
7267786266dSMatt Arsenault
7277786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_3_3(ptr addrspace(1) inreg %ptr) {
7287786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_3_3:
7297786266dSMatt Arsenault; GFX900:       ; %bb.0:
7307786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
7327786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
7337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
7347786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
7357786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
7367786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
7377786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, v0
7387786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
7397786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
7407786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
7417786266dSMatt Arsenault;
7427786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_3_3:
7437786266dSMatt Arsenault; GFX90A:       ; %bb.0:
7447786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
7467786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
7477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
7487786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
7497786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
7507786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
7517786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
7527786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
7537786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7547786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
7557786266dSMatt Arsenault;
7567786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_3_3:
7577786266dSMatt Arsenault; GFX940:       ; %bb.0:
7587786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7597786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
7607786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
7617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
7627786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
7637786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
7647786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
7657786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, v0
7667786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
7677786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
7687786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
7697786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
7707786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
7717786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
7727786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
7737786266dSMatt Arsenault  ret void
7747786266dSMatt Arsenault}
7757786266dSMatt Arsenault
7767786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__u_0_0_0(ptr addrspace(1) inreg %ptr) {
7777786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__u_0_0_0:
7787786266dSMatt Arsenault; GFX900:       ; %bb.0:
7797786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7807786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
7817786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
7827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
7837786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
7847786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
7857786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
7867786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, v0
7877786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
7887786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
7897786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
7907786266dSMatt Arsenault;
7917786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__u_0_0_0:
7927786266dSMatt Arsenault; GFX90A:       ; %bb.0:
7937786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
7957786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
7967786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
7977786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
7987786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
7997786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
8007786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
8017786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
8027786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8037786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
8047786266dSMatt Arsenault;
8057786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__u_0_0_0:
8067786266dSMatt Arsenault; GFX940:       ; %bb.0:
8077786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
8097786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
8107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
8117786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
8127786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
8137786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
8147786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, v0
8157786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
8167786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
8177786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
8187786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
8197786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
8207786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
8217786266dSMatt Arsenault  ret void
8227786266dSMatt Arsenault}
8237786266dSMatt Arsenault
8247786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__0_0_0_0(ptr addrspace(1) inreg %ptr) {
8257786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__0_0_0_0:
8267786266dSMatt Arsenault; GFX900:       ; %bb.0:
8277786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
8297786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
8307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
8317786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
8327786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
8337786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
8347786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, v0
8357786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
8367786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
8377786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
8387786266dSMatt Arsenault;
8397786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__0_0_0_0:
8407786266dSMatt Arsenault; GFX90A:       ; %bb.0:
8417786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
8437786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
8447786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
8457786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
8467786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
8477786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
8487786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
8497786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
8507786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8517786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
8527786266dSMatt Arsenault;
8537786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__0_0_0_0:
8547786266dSMatt Arsenault; GFX940:       ; %bb.0:
8557786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
8577786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
8587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
8597786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
8607786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
8617786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
8627786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, v0
8637786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
8647786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
8657786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
8667786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
8677786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> zeroinitializer
8687786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
8697786266dSMatt Arsenault  ret void
8707786266dSMatt Arsenault}
8717786266dSMatt Arsenault
8727786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__1_0_0_0(ptr addrspace(1) inreg %ptr) {
8737786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__1_0_0_0:
8747786266dSMatt Arsenault; GFX900:       ; %bb.0:
8757786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8767786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
8777786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
8787786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
8797786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
8807786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
8817786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
8827786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
8837786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
8847786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
8857786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
8867786266dSMatt Arsenault;
8877786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__1_0_0_0:
8887786266dSMatt Arsenault; GFX90A:       ; %bb.0:
8897786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8907786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
8917786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
8927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
8937786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
8947786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
8957786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
8967786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
8977786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
8987786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8997786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
9007786266dSMatt Arsenault;
9017786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__1_0_0_0:
9027786266dSMatt Arsenault; GFX940:       ; %bb.0:
9037786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
9057786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
9067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
9077786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
9087786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
9097786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
9107786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
9117786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
9127786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
9137786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
9147786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
9157786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
9167786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
9177786266dSMatt Arsenault  ret void
9187786266dSMatt Arsenault}
9197786266dSMatt Arsenault
9207786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__2_0_0_0(ptr addrspace(1) inreg %ptr) {
9217786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__2_0_0_0:
9227786266dSMatt Arsenault; GFX900:       ; %bb.0:
9237786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9247786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
9257786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
9267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
9277786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
9287786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
9297786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
9307786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, v0
9317786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
9327786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
9337786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
9347786266dSMatt Arsenault;
9357786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__2_0_0_0:
9367786266dSMatt Arsenault; GFX90A:       ; %bb.0:
9377786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9387786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
9397786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
9407786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
9417786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
9427786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
9437786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
9447786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
9457786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
9467786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9477786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
9487786266dSMatt Arsenault;
9497786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__2_0_0_0:
9507786266dSMatt Arsenault; GFX940:       ; %bb.0:
9517786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9527786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
9537786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
9547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
9557786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
9567786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
9577786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
9587786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, v0
9597786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
9607786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
9617786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
9627786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
9637786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
9647786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
9657786266dSMatt Arsenault  ret void
9667786266dSMatt Arsenault}
9677786266dSMatt Arsenault
9687786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_0_0_0(ptr addrspace(1) inreg %ptr) {
9697786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_0_0_0:
9707786266dSMatt Arsenault; GFX900:       ; %bb.0:
9717786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
9737786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
9747786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
9757786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
9767786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
9777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
9787786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
9797786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
9807786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
9817786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v3, 16
9827786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
9837786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
9847786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
9857786266dSMatt Arsenault;
9867786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_0_0_0:
9877786266dSMatt Arsenault; GFX90A:       ; %bb.0:
9887786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9897786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
9907786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
9917786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
9927786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
9937786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
9947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
9957786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
9967786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
9977786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
9987786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v3, 16
9997786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
10007786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10017786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
10027786266dSMatt Arsenault;
10037786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_0_0_0:
10047786266dSMatt Arsenault; GFX940:       ; %bb.0:
10057786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
10077786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
10087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
10097786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
10107786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
10117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
10127786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
10137786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
10147786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
10157786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v3, 16
10167786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
10177786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
10187786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
10197786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
10207786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
10217786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
10227786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
10237786266dSMatt Arsenault  ret void
10247786266dSMatt Arsenault}
10257786266dSMatt Arsenault
10267786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_u_0_0(ptr addrspace(1) inreg %ptr) {
10277786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_u_0_0:
10287786266dSMatt Arsenault; GFX900:       ; %bb.0:
10297786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
10317786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
10327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
10337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
10347786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
10357786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
10367786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
10377786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
10387786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
10397786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
10407786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
10417786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
10427786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
10437786266dSMatt Arsenault;
10447786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_u_0_0:
10457786266dSMatt Arsenault; GFX90A:       ; %bb.0:
10467786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
10487786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
10497786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
10507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
10517786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
10527786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
10537786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
10547786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
10557786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
10567786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
10577786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
10587786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10597786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
10607786266dSMatt Arsenault;
10617786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_u_0_0:
10627786266dSMatt Arsenault; GFX940:       ; %bb.0:
10637786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
10657786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
10667786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
10677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
10687786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
10697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
10707786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
10717786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
10727786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
10737786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
10747786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
10757786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
10767786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
10777786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
10787786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
10797786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>
10807786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
10817786266dSMatt Arsenault  ret void
10827786266dSMatt Arsenault}
10837786266dSMatt Arsenault
10847786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_1_0_0(ptr addrspace(1) inreg %ptr) {
10857786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_1_0_0:
10867786266dSMatt Arsenault; GFX900:       ; %bb.0:
10877786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
10897786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
10907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
10917786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
10927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
10937786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
10947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
10957786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
10967786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
10977786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
10987786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
10997786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
11007786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
11017786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
11027786266dSMatt Arsenault;
11037786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_1_0_0:
11047786266dSMatt Arsenault; GFX90A:       ; %bb.0:
11057786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
11077786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
11087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
11097786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
11107786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
11117786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
11127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
11137786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s4
11147786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
11157786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
11167786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
11177786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
11187786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11197786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
11207786266dSMatt Arsenault;
11217786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_1_0_0:
11227786266dSMatt Arsenault; GFX940:       ; %bb.0:
11237786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11247786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
11257786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
11267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
11277786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
11287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
11297786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
11307786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
11317786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
11327786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v0, s2
11337786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
11347786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
11357786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
11367786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
11377786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
11387786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
11397786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
11407786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>
11417786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
11427786266dSMatt Arsenault  ret void
11437786266dSMatt Arsenault}
11447786266dSMatt Arsenault
11457786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_2_0_0(ptr addrspace(1) inreg %ptr) {
11467786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_2_0_0:
11477786266dSMatt Arsenault; GFX900:       ; %bb.0:
11487786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
11507786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
11517786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
11527786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
11537786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
11547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
11557786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
11567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
11577786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
11587786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v3, v3, 16
11597786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
11607786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
11617786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
11627786266dSMatt Arsenault;
11637786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_2_0_0:
11647786266dSMatt Arsenault; GFX90A:       ; %bb.0:
11657786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11667786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
11677786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
11687786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
11697786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
11707786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
11717786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
11727786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
11737786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
11747786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
11757786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v3, 16
11767786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
11777786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11787786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
11797786266dSMatt Arsenault;
11807786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_2_0_0:
11817786266dSMatt Arsenault; GFX940:       ; %bb.0:
11827786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11837786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
11847786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
11857786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
11867786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
11877786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
11887786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
11897786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
11907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
11917786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
11927786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v3, v3, 16
11937786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
11947786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
11957786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
11967786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
11977786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
11987786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>
11997786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
12007786266dSMatt Arsenault  ret void
12017786266dSMatt Arsenault}
12027786266dSMatt Arsenault
12037786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_0_0(ptr addrspace(1) inreg %ptr) {
12047786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_0_0:
12057786266dSMatt Arsenault; GFX900:       ; %bb.0:
12067786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12077786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
12087786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
12097786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
12107786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
12117786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
12127786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
12137786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
12147786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
12157786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
12167786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
12177786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
12187786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
12197786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
12207786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
12217786266dSMatt Arsenault;
12227786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_0_0:
12237786266dSMatt Arsenault; GFX90A:       ; %bb.0:
12247786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12257786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
12267786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
12277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
12287786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
12297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
12307786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
12317786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
12327786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
12337786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
12347786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
12357786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
12367786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
12377786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
12387786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
12397786266dSMatt Arsenault;
12407786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_0_0:
12417786266dSMatt Arsenault; GFX940:       ; %bb.0:
12427786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12437786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
12447786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
12457786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
12467786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
12477786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
12487786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
12497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
12507786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
12517786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
12527786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
12537786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
12547786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
12557786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
12567786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
12577786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
12587786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
12597786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
12607786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
12617786266dSMatt Arsenault  ret void
12627786266dSMatt Arsenault}
12637786266dSMatt Arsenault
12647786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_u_0(ptr addrspace(1) inreg %ptr) {
12657786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_u_0:
12667786266dSMatt Arsenault; GFX900:       ; %bb.0:
12677786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12687786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
12697786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
12707786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
12717786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
12727786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
12737786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
12747786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
12757786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
12767786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
12777786266dSMatt Arsenault; GFX900-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12787786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
12797786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
12807786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
12817786266dSMatt Arsenault;
12827786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_u_0:
12837786266dSMatt Arsenault; GFX90A:       ; %bb.0:
12847786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12857786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
12867786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
12877786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
12887786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
12897786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
12907786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
12917786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
12927786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
12937786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
12947786266dSMatt Arsenault; GFX90A-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12957786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
12967786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
12977786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
12987786266dSMatt Arsenault;
12997786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_u_0:
13007786266dSMatt Arsenault; GFX940:       ; %bb.0:
13017786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13027786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
13037786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
13047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
13057786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
13067786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
13077786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
13087786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
13097786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
13107786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
13117786266dSMatt Arsenault; GFX940-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13127786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
13137786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
13147786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
13157786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
13167786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
13177786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>
13187786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
13197786266dSMatt Arsenault  ret void
13207786266dSMatt Arsenault}
13217786266dSMatt Arsenault
13227786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_1_0(ptr addrspace(1) inreg %ptr) {
13237786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_1_0:
13247786266dSMatt Arsenault; GFX900:       ; %bb.0:
13257786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
13277786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
13287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
13297786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
13307786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
13317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
13327786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
13337786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
13347786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
13357786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, v1, v1, 16
13367786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
13377786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
13387786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
13397786266dSMatt Arsenault;
13407786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_1_0:
13417786266dSMatt Arsenault; GFX90A:       ; %bb.0:
13427786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13437786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
13447786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
13457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
13467786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
13477786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
13487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
13497786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
13507786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
13517786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
13527786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v1, 16
13537786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
13547786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
13557786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
13567786266dSMatt Arsenault;
13577786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_1_0:
13587786266dSMatt Arsenault; GFX940:       ; %bb.0:
13597786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
13617786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
13627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
13637786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
13647786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
13657786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
13667786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
13677786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
13687786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
13697786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, v1, v1, 16
13707786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
13717786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
13727786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
13737786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
13747786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
13757786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>
13767786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
13777786266dSMatt Arsenault  ret void
13787786266dSMatt Arsenault}
13797786266dSMatt Arsenault
13807786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_2_0(ptr addrspace(1) inreg %ptr) {
13817786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_2_0:
13827786266dSMatt Arsenault; GFX900:       ; %bb.0:
13837786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13847786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
13857786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
13867786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
13877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
13887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
13897786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
13907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
13917786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v3, s4
13927786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
13937786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
13947786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
13957786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
13967786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
13977786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
13987786266dSMatt Arsenault;
13997786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_2_0:
14007786266dSMatt Arsenault; GFX90A:       ; %bb.0:
14017786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14027786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
14037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
14047786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
14057786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
14067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
14077786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
14087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
14097786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v3, s4
14107786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
14117786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
14127786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
14137786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
14147786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
14157786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
14167786266dSMatt Arsenault;
14177786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_2_0:
14187786266dSMatt Arsenault; GFX940:       ; %bb.0:
14197786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14207786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
14217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
14227786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
14237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
14247786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
14257786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
14267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
14277786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
14287786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v3, s2
14297786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
14307786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
14317786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
14327786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
14337786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
14347786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
14357786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
14367786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>
14377786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
14387786266dSMatt Arsenault  ret void
14397786266dSMatt Arsenault}
14407786266dSMatt Arsenault
14417786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__u_1_1_1(ptr addrspace(1) inreg %ptr) {
14427786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__u_1_1_1:
14437786266dSMatt Arsenault; GFX900:       ; %bb.0:
14447786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14457786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
14467786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
14477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
14487786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
14497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
14507786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
14517786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
14527786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
14537786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
14547786266dSMatt Arsenault;
14557786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__u_1_1_1:
14567786266dSMatt Arsenault; GFX90A:       ; %bb.0:
14577786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14587786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
14597786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
14607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
14617786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
14627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
14637786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
14647786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
14657786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
14667786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
14677786266dSMatt Arsenault;
14687786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__u_1_1_1:
14697786266dSMatt Arsenault; GFX940:       ; %bb.0:
14707786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14717786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
14727786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
14737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
14747786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
14757786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
14767786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
14777786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
14787786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
14797786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
14807786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
14817786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
14827786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
14837786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
14847786266dSMatt Arsenault  ret void
14857786266dSMatt Arsenault}
14867786266dSMatt Arsenault
14877786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__0_1_1_1(ptr addrspace(1) inreg %ptr) {
14887786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__0_1_1_1:
14897786266dSMatt Arsenault; GFX900:       ; %bb.0:
14907786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14917786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
14927786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
14937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
14947786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
14957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
14967786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
14977786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
14987786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
14997786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
15007786266dSMatt Arsenault;
15017786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__0_1_1_1:
15027786266dSMatt Arsenault; GFX90A:       ; %bb.0:
15037786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15047786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
15057786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
15067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
15077786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
15087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
15097786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
15107786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
15117786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
15127786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
15137786266dSMatt Arsenault;
15147786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__0_1_1_1:
15157786266dSMatt Arsenault; GFX940:       ; %bb.0:
15167786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15177786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
15187786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
15197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
15207786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
15217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
15227786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
15237786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
15247786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
15257786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
15267786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
15277786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
15287786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
15297786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
15307786266dSMatt Arsenault  ret void
15317786266dSMatt Arsenault}
15327786266dSMatt Arsenault
15337786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__1_1_1_1(ptr addrspace(1) inreg %ptr) {
15347786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__1_1_1_1:
15357786266dSMatt Arsenault; GFX900:       ; %bb.0:
15367786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15377786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
15387786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
15397786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
15407786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
15417786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
15427786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
15437786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, v0
15447786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
15457786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
15467786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
15477786266dSMatt Arsenault;
15487786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__1_1_1_1:
15497786266dSMatt Arsenault; GFX90A:       ; %bb.0:
15507786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15517786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
15527786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
15537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
15547786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
15557786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
15567786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
15577786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
15587786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
15597786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
15607786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
15617786266dSMatt Arsenault;
15627786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__1_1_1_1:
15637786266dSMatt Arsenault; GFX940:       ; %bb.0:
15647786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15657786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
15667786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
15677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
15687786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
15697786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
15707786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
15717786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, v0
15727786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
15737786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
15747786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
15757786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
15767786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
15777786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
15787786266dSMatt Arsenault  ret void
15797786266dSMatt Arsenault}
15807786266dSMatt Arsenault
15817786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__2_1_1_1(ptr addrspace(1) inreg %ptr) {
15827786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__2_1_1_1:
15837786266dSMatt Arsenault; GFX900:       ; %bb.0:
15847786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15857786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
15867786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
15877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
15887786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
15897786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
15907786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
15917786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
15927786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
15937786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
15947786266dSMatt Arsenault;
15957786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__2_1_1_1:
15967786266dSMatt Arsenault; GFX90A:       ; %bb.0:
15977786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15987786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
15997786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
16007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
16017786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
16027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
16037786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
16047786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
16057786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
16067786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
16077786266dSMatt Arsenault;
16087786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__2_1_1_1:
16097786266dSMatt Arsenault; GFX940:       ; %bb.0:
16107786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16117786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
16127786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
16137786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
16147786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
16157786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
16167786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
16177786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
16187786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
16197786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
16207786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
16217786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
16227786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
16237786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
16247786266dSMatt Arsenault  ret void
16257786266dSMatt Arsenault}
16267786266dSMatt Arsenault
16277786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_1_1_1(ptr addrspace(1) inreg %ptr) {
16287786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_1_1_1:
16297786266dSMatt Arsenault; GFX900:       ; %bb.0:
16307786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
16327786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
16337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
16347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
16357786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
16367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
16377786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
16387786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
16397786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
16407786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
16417786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
16427786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
16437786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
16447786266dSMatt Arsenault;
16457786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_1_1_1:
16467786266dSMatt Arsenault; GFX90A:       ; %bb.0:
16477786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
16497786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
16507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
16517786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
16527786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
16537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
16547786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
16557786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
16567786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s4
16577786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
16587786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
16597786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
16607786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
16617786266dSMatt Arsenault;
16627786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_1_1_1:
16637786266dSMatt Arsenault; GFX940:       ; %bb.0:
16647786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16657786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
16667786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
16677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
16687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
16697786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
16707786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
16717786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
16727786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
16737786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v0, s2
16747786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
16757786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
16767786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
16777786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
16787786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
16797786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
16807786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
16817786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
16827786266dSMatt Arsenault  ret void
16837786266dSMatt Arsenault}
16847786266dSMatt Arsenault
16857786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_u_1_1(ptr addrspace(1) inreg %ptr) {
16867786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_u_1_1:
16877786266dSMatt Arsenault; GFX900:       ; %bb.0:
16887786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16897786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
16907786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
16917786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
16927786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
16937786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
16947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
16957786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
16967786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
16977786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
16987786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v3, 16
16997786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
17007786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
17017786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
17027786266dSMatt Arsenault;
17037786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_u_1_1:
17047786266dSMatt Arsenault; GFX90A:       ; %bb.0:
17057786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
17077786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
17087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
17097786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
17107786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
17117786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
17127786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
17137786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
17147786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
17157786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v3, 16
17167786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
17177786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
17187786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
17197786266dSMatt Arsenault;
17207786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_u_1_1:
17217786266dSMatt Arsenault; GFX940:       ; %bb.0:
17227786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
17247786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
17257786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
17267786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
17277786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
17287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
17297786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
17307786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
17317786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
17327786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v3, 16
17337786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
17347786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
17357786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
17367786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
17377786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
17387786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>
17397786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
17407786266dSMatt Arsenault  ret void
17417786266dSMatt Arsenault}
17427786266dSMatt Arsenault
17437786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_0_1_1(ptr addrspace(1) inreg %ptr) {
17447786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_0_1_1:
17457786266dSMatt Arsenault; GFX900:       ; %bb.0:
17467786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
17487786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
17497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
17507786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
17517786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
17527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
17537786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
17547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
17557786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
17567786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v3, 16
17577786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
17587786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
17597786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
17607786266dSMatt Arsenault;
17617786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_0_1_1:
17627786266dSMatt Arsenault; GFX90A:       ; %bb.0:
17637786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17647786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
17657786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
17667786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
17677786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
17687786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
17697786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
17707786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
17717786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
17727786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
17737786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v3, 16
17747786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
17757786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
17767786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
17777786266dSMatt Arsenault;
17787786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_0_1_1:
17797786266dSMatt Arsenault; GFX940:       ; %bb.0:
17807786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
17827786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
17837786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
17847786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
17857786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
17867786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
17877786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
17887786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
17897786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
17907786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v3, 16
17917786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
17927786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
17937786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
17947786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
17957786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
17967786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>
17977786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
17987786266dSMatt Arsenault  ret void
17997786266dSMatt Arsenault}
18007786266dSMatt Arsenault
18017786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_2_1_1(ptr addrspace(1) inreg %ptr) {
18027786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_2_1_1:
18037786266dSMatt Arsenault; GFX900:       ; %bb.0:
18047786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18057786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
18067786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
18077786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
18087786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
18097786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
18107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
18117786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
18127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
18137786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
18147786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v3, v3, 16
18157786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
18167786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
18177786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
18187786266dSMatt Arsenault;
18197786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_2_1_1:
18207786266dSMatt Arsenault; GFX90A:       ; %bb.0:
18217786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18227786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
18237786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
18247786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
18257786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
18267786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
18277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
18287786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
18297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
18307786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
18317786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v3, 16
18327786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
18337786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
18347786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
18357786266dSMatt Arsenault;
18367786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_2_1_1:
18377786266dSMatt Arsenault; GFX940:       ; %bb.0:
18387786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18397786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
18407786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
18417786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
18427786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
18437786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
18447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
18457786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
18467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
18477786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
18487786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v3, v3, 16
18497786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
18507786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
18517786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
18527786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
18537786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
18547786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>
18557786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
18567786266dSMatt Arsenault  ret void
18577786266dSMatt Arsenault}
18587786266dSMatt Arsenault
18597786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_1_1(ptr addrspace(1) inreg %ptr) {
18607786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_1_1:
18617786266dSMatt Arsenault; GFX900:       ; %bb.0:
18627786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18637786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
18647786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
18657786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
18667786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
18677786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
18687786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
18697786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
18707786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
18717786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
18727786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
18737786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
18747786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
18757786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
18767786266dSMatt Arsenault;
18777786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_1_1:
18787786266dSMatt Arsenault; GFX90A:       ; %bb.0:
18797786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18807786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
18817786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
18827786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
18837786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
18847786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
18857786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
18867786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
18877786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
18887786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
18897786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
18907786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
18917786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
18927786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
18937786266dSMatt Arsenault;
18947786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_1_1:
18957786266dSMatt Arsenault; GFX940:       ; %bb.0:
18967786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18977786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
18987786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
18997786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
19007786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
19017786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
19027786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
19037786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
19047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
19057786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
19067786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
19077786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
19087786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
19097786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
19107786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
19117786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
19127786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
19137786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
19147786266dSMatt Arsenault  ret void
19157786266dSMatt Arsenault}
19167786266dSMatt Arsenault
19177786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_u_1(ptr addrspace(1) inreg %ptr) {
19187786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_u_1:
19197786266dSMatt Arsenault; GFX900:       ; %bb.0:
19207786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19217786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
19227786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
19237786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
19247786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
19257786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
19267786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
19277786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
19287786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
19297786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
19307786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
19317786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
19327786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
19337786266dSMatt Arsenault;
19347786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_u_1:
19357786266dSMatt Arsenault; GFX90A:       ; %bb.0:
19367786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19377786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
19387786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
19397786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
19407786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
19417786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
19427786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
19437786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
19447786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
19457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
19467786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
19477786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
19487786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
19497786266dSMatt Arsenault;
19507786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_u_1:
19517786266dSMatt Arsenault; GFX940:       ; %bb.0:
19527786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19537786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
19547786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
19557786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
19567786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
19577786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
19587786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
19597786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
19607786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
19617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
19627786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
19637786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
19647786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
19657786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
19667786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
19677786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
19687786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
19697786266dSMatt Arsenault  ret void
19707786266dSMatt Arsenault}
19717786266dSMatt Arsenault
19727786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_0_1(ptr addrspace(1) inreg %ptr) {
19737786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_0_1:
19747786266dSMatt Arsenault; GFX900:       ; %bb.0:
19757786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19767786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
19777786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
19787786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
19797786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
19807786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
19817786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
19827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
19837786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
19847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
19857786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
19867786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
19877786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
19887786266dSMatt Arsenault;
19897786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_0_1:
19907786266dSMatt Arsenault; GFX90A:       ; %bb.0:
19917786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
19937786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
19947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
19957786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
19967786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
19977786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
19987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
19997786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
20007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
20017786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
20027786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
20037786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
20047786266dSMatt Arsenault;
20057786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_0_1:
20067786266dSMatt Arsenault; GFX940:       ; %bb.0:
20077786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
20097786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
20107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
20117786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
20127786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
20137786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
20147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
20157786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
20167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
20177786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
20187786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
20197786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
20207786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
20217786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
20227786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
20237786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
20247786266dSMatt Arsenault  ret void
20257786266dSMatt Arsenault}
20267786266dSMatt Arsenault
20277786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_2_1(ptr addrspace(1) inreg %ptr) {
20287786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_2_1:
20297786266dSMatt Arsenault; GFX900:       ; %bb.0:
20307786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20317786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0xffff
20327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
20337786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
20347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
20357786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
20367786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
20377786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
20387786266dSMatt Arsenault; GFX900-NEXT:    v_bfi_b32 v1, s4, v3, v0
20397786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
20407786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
20417786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
20427786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
20437786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
20447786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
20457786266dSMatt Arsenault;
20467786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_2_1:
20477786266dSMatt Arsenault; GFX90A:       ; %bb.0:
20487786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20497786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
20507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
20517786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
20527786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
20537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
20547786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
20557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
20567786266dSMatt Arsenault; GFX90A-NEXT:    v_bfi_b32 v1, s4, v3, v0
20577786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
20587786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
20597786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
20607786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
20617786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
20627786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
20637786266dSMatt Arsenault;
20647786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_2_1:
20657786266dSMatt Arsenault; GFX940:       ; %bb.0:
20667786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20677786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0xffff
20687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
20697786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
20707786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
20717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
20727786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
20737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
20747786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
20757786266dSMatt Arsenault; GFX940-NEXT:    v_bfi_b32 v1, s2, v3, v0
20767786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
20777786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
20787786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
20797786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
20807786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
20817786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
20827786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
20837786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>
20847786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
20857786266dSMatt Arsenault  ret void
20867786266dSMatt Arsenault}
20877786266dSMatt Arsenault
20887786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__u_2_2_2(ptr addrspace(1) inreg %ptr) {
20897786266dSMatt Arsenault; GFX9-LABEL: v_shuffle_v4i16_v2i16__u_2_2_2:
20907786266dSMatt Arsenault; GFX9:       ; %bb.0:
20917786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20927786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
20937786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
20947786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
20957786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
20967786266dSMatt Arsenault  ret void
20977786266dSMatt Arsenault}
20987786266dSMatt Arsenault
20997786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__0_2_2_2(ptr addrspace(1) inreg %ptr) {
21007786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__0_2_2_2:
21017786266dSMatt Arsenault; GFX900:       ; %bb.0:
21027786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21037786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
21047786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
21057786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
21067786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
21077786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
21087786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
21097786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
21107786266dSMatt Arsenault;
21117786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__0_2_2_2:
21127786266dSMatt Arsenault; GFX90A:       ; %bb.0:
21137786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21147786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
21157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
21167786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
21177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
21187786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
21197786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
21207786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
21217786266dSMatt Arsenault;
21227786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__0_2_2_2:
21237786266dSMatt Arsenault; GFX940:       ; %bb.0:
21247786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21257786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
21267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
21277786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
21287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
21297786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
21307786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
21317786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
21327786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
21337786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
21347786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
21357786266dSMatt Arsenault  ret void
21367786266dSMatt Arsenault}
21377786266dSMatt Arsenault
21387786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__1_2_2_2(ptr addrspace(1) inreg %ptr) {
21397786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__1_2_2_2:
21407786266dSMatt Arsenault; GFX900:       ; %bb.0:
21417786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21427786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
21437786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
21447786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
21457786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v1, 0
21467786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
21477786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
21487786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
21497786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
21507786266dSMatt Arsenault;
21517786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__1_2_2_2:
21527786266dSMatt Arsenault; GFX90A:       ; %bb.0:
21537786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21547786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
21557786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
21567786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
21577786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
21587786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
21597786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v1, v[0:1], s[16:17]
21607786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
21617786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
21627786266dSMatt Arsenault;
21637786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__1_2_2_2:
21647786266dSMatt Arsenault; GFX940:       ; %bb.0:
21657786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21667786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
21677786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
21687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
21697786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v1, 0
21707786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
21717786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v1, v[0:1], s[0:1] sc0 sc1
21727786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
21737786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
21747786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
21757786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
21767786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
21777786266dSMatt Arsenault  ret void
21787786266dSMatt Arsenault}
21797786266dSMatt Arsenault
21807786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__2_2_2_2(ptr addrspace(1) inreg %ptr) {
21817786266dSMatt Arsenault; GFX9-LABEL: v_shuffle_v4i16_v2i16__2_2_2_2:
21827786266dSMatt Arsenault; GFX9:       ; %bb.0:
21837786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21847786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
21857786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
21867786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
21877786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
21887786266dSMatt Arsenault  ret void
21897786266dSMatt Arsenault}
21907786266dSMatt Arsenault
21917786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_2_2_2(ptr addrspace(1) inreg %ptr) {
21927786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_2_2_2:
21937786266dSMatt Arsenault; GFX900:       ; %bb.0:
21947786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
21967786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
21977786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
21987786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
21997786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
22007786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
22017786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
22027786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
22037786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
22047786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
22057786266dSMatt Arsenault;
22067786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_2_2_2:
22077786266dSMatt Arsenault; GFX90A:       ; %bb.0:
22087786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
22107786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
22117786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
22127786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
22137786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
22147786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
22157786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
22167786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
22177786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
22187786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
22197786266dSMatt Arsenault;
22207786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_2_2_2:
22217786266dSMatt Arsenault; GFX940:       ; %bb.0:
22227786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
22247786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
22257786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
22267786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
22277786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
22287786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
22297786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
22307786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
22317786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
22327786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
22337786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
22347786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
22357786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
22367786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
22377786266dSMatt Arsenault  ret void
22387786266dSMatt Arsenault}
22397786266dSMatt Arsenault
22407786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_u_2_2(ptr addrspace(1) inreg %ptr) {
22417786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_u_2_2:
22427786266dSMatt Arsenault; GFX900:       ; %bb.0:
22437786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22447786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
22457786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
22467786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
22477786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v1, 16
22487786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
22497786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
22507786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
22517786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
22527786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
22537786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
22547786266dSMatt Arsenault;
22557786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_u_2_2:
22567786266dSMatt Arsenault; GFX90A:       ; %bb.0:
22577786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22587786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
22597786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
22607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
22617786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v1, 16
22627786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
22637786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
22647786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
22657786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
22667786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
22677786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
22687786266dSMatt Arsenault;
22697786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_u_2_2:
22707786266dSMatt Arsenault; GFX940:       ; %bb.0:
22717786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22727786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
22737786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
22747786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
22757786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
22767786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
22777786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v1, 16
22787786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
22797786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
22807786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
22817786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
22827786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
22837786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
22847786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
22857786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
22867786266dSMatt Arsenault  ret void
22877786266dSMatt Arsenault}
22887786266dSMatt Arsenault
22897786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_0_2_2(ptr addrspace(1) inreg %ptr) {
22907786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_0_2_2:
22917786266dSMatt Arsenault; GFX900:       ; %bb.0:
22927786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
22947786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
22957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
22967786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
22977786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
22987786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
22997786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
23007786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
23017786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v3, v3, s4
23027786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v3, 16
23037786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
23047786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
23057786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
23067786266dSMatt Arsenault;
23077786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_0_2_2:
23087786266dSMatt Arsenault; GFX90A:       ; %bb.0:
23097786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23107786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
23117786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
23127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
23137786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
23147786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
23157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
23167786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
23177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
23187786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v3, v3, s4
23197786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v3, 16
23207786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
23217786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
23227786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
23237786266dSMatt Arsenault;
23247786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_0_2_2:
23257786266dSMatt Arsenault; GFX940:       ; %bb.0:
23267786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23277786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
23287786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
23297786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
23307786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
23317786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
23327786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
23337786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
23347786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
23357786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
23367786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v3, v3, s2
23377786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v3, 16
23387786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
23397786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
23407786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
23417786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
23427786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
23437786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>
23447786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
23457786266dSMatt Arsenault  ret void
23467786266dSMatt Arsenault}
23477786266dSMatt Arsenault
23487786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_1_2_2(ptr addrspace(1) inreg %ptr) {
23497786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_1_2_2:
23507786266dSMatt Arsenault; GFX900:       ; %bb.0:
23517786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
23537786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
23547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
23557786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
23567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
23577786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
23587786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
23597786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4
23607786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
23617786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
23627786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
23637786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
23647786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
23657786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
23667786266dSMatt Arsenault;
23677786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_1_2_2:
23687786266dSMatt Arsenault; GFX90A:       ; %bb.0:
23697786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23707786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
23717786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
23727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
23737786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
23747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
23757786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
23767786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
23777786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4
23787786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
23797786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
23807786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
23817786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
23827786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
23837786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
23847786266dSMatt Arsenault;
23857786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_1_2_2:
23867786266dSMatt Arsenault; GFX940:       ; %bb.0:
23877786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23887786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
23897786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
23907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
23917786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
23927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
23937786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
23947786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
23957786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
23967786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v1, s2
23977786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
23987786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
23997786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
24007786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
24017786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
24027786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
24037786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
24047786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
24057786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
24067786266dSMatt Arsenault  ret void
24077786266dSMatt Arsenault}
24087786266dSMatt Arsenault
24097786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_2_2(ptr addrspace(1) inreg %ptr) {
24107786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_2_2:
24117786266dSMatt Arsenault; GFX900:       ; %bb.0:
24127786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24137786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
24147786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
24157786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
24167786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
24177786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
24187786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
24197786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
24207786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
24217786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
24227786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
24237786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
24247786266dSMatt Arsenault;
24257786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_2_2:
24267786266dSMatt Arsenault; GFX90A:       ; %bb.0:
24277786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24287786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
24297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
24307786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
24317786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
24327786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
24337786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
24347786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
24357786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
24367786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
24377786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
24387786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
24397786266dSMatt Arsenault;
24407786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_2_2:
24417786266dSMatt Arsenault; GFX940:       ; %bb.0:
24427786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24437786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
24447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
24457786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
24467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
24477786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
24487786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
24497786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
24507786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
24517786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
24527786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
24537786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
24547786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
24557786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
24567786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
24577786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
24587786266dSMatt Arsenault  ret void
24597786266dSMatt Arsenault}
24607786266dSMatt Arsenault
24617786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_u_2(ptr addrspace(1) inreg %ptr) {
24627786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_u_2:
24637786266dSMatt Arsenault; GFX900:       ; %bb.0:
24647786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24657786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
24667786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
24677786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
24687786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
24697786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
24707786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
24717786266dSMatt Arsenault; GFX900-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
24727786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
24737786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
24747786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
24757786266dSMatt Arsenault;
24767786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_u_2:
24777786266dSMatt Arsenault; GFX90A:       ; %bb.0:
24787786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
24807786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
24817786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
24827786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
24837786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
24847786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
24857786266dSMatt Arsenault; GFX90A-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
24867786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
24877786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
24887786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
24897786266dSMatt Arsenault;
24907786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_u_2:
24917786266dSMatt Arsenault; GFX940:       ; %bb.0:
24927786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24937786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
24947786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
24957786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
24967786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
24977786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
24987786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
24997786266dSMatt Arsenault; GFX940-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
25007786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
25017786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
25027786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
25037786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
25047786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
25057786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>
25067786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
25077786266dSMatt Arsenault  ret void
25087786266dSMatt Arsenault}
25097786266dSMatt Arsenault
25107786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_0_2(ptr addrspace(1) inreg %ptr) {
25117786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_0_2:
25127786266dSMatt Arsenault; GFX900:       ; %bb.0:
25137786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25147786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
25157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
25167786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
25177786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
25187786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
25197786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
25207786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
25217786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v3, v0, s4
25227786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
25237786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
25247786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
25257786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
25267786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
25277786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
25287786266dSMatt Arsenault;
25297786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_0_2:
25307786266dSMatt Arsenault; GFX90A:       ; %bb.0:
25317786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25327786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
25337786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
25347786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
25357786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
25367786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
25377786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
25387786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
25397786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v3, v0, s4
25407786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
25417786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
25427786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
25437786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
25447786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
25457786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
25467786266dSMatt Arsenault;
25477786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_0_2:
25487786266dSMatt Arsenault; GFX940:       ; %bb.0:
25497786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25507786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
25517786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
25527786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
25537786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
25547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
25557786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
25567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
25577786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
25587786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v3, v0, s2
25597786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
25607786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
25617786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
25627786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
25637786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
25647786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
25657786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
25667786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>
25677786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
25687786266dSMatt Arsenault  ret void
25697786266dSMatt Arsenault}
25707786266dSMatt Arsenault
25717786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_1_2(ptr addrspace(1) inreg %ptr) {
25727786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_1_2:
25737786266dSMatt Arsenault; GFX900:       ; %bb.0:
25747786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25757786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
25767786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
25777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
25787786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
25797786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
25807786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
25817786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
25827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
25837786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
25847786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v1, v3, v1, 16
25857786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
25867786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
25877786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
25887786266dSMatt Arsenault;
25897786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_1_2:
25907786266dSMatt Arsenault; GFX90A:       ; %bb.0:
25917786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
25937786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
25947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
25957786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
25967786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
25977786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
25987786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
25997786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
26007786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
26017786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v1, v3, v1, 16
26027786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
26037786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
26047786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
26057786266dSMatt Arsenault;
26067786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_1_2:
26077786266dSMatt Arsenault; GFX940:       ; %bb.0:
26087786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26097786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
26107786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
26117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
26127786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
26137786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
26147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
26157786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
26167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
26177786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
26187786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
26197786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v1, v3, v1, 16
26207786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
26217786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
26227786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
26237786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
26247786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
26257786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>
26267786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
26277786266dSMatt Arsenault  ret void
26287786266dSMatt Arsenault}
26297786266dSMatt Arsenault
26307786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__u_3_3_3(ptr addrspace(1) inreg %ptr) {
26317786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__u_3_3_3:
26327786266dSMatt Arsenault; GFX900:       ; %bb.0:
26337786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26347786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
26357786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
26367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
26377786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
26387786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
26397786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
26407786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
26417786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
26427786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
26437786266dSMatt Arsenault;
26447786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__u_3_3_3:
26457786266dSMatt Arsenault; GFX90A:       ; %bb.0:
26467786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26477786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
26487786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
26497786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
26507786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
26517786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
26527786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
26537786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
26547786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
26557786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
26567786266dSMatt Arsenault;
26577786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__u_3_3_3:
26587786266dSMatt Arsenault; GFX940:       ; %bb.0:
26597786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26607786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
26617786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
26627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
26637786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
26647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
26657786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
26667786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
26677786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
26687786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
26697786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
26707786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
26717786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
26727786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
26737786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
26747786266dSMatt Arsenault  ret void
26757786266dSMatt Arsenault}
26767786266dSMatt Arsenault
26777786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__0_3_3_3(ptr addrspace(1) inreg %ptr) {
26787786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__0_3_3_3:
26797786266dSMatt Arsenault; GFX900:       ; %bb.0:
26807786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26817786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
26827786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
26837786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
26847786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0xffff
26857786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
26867786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
26877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
26887786266dSMatt Arsenault; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v1
26897786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
26907786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
26917786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
26927786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
26937786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
26947786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
26957786266dSMatt Arsenault;
26967786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__0_3_3_3:
26977786266dSMatt Arsenault; GFX90A:       ; %bb.0:
26987786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26997786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
27007786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
27017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
27027786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
27037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
27047786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
27057786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
27067786266dSMatt Arsenault; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v1
27077786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
27087786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
27097786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
27107786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
27117786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
27127786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
27137786266dSMatt Arsenault;
27147786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__0_3_3_3:
27157786266dSMatt Arsenault; GFX940:       ; %bb.0:
27167786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27177786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
27187786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
27197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
27207786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0xffff
27217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
27227786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
27237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
27247786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
27257786266dSMatt Arsenault; GFX940-NEXT:    v_bfi_b32 v0, s2, v0, v1
27267786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
27277786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
27287786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
27297786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
27307786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
27317786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
27327786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
27337786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
27347786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
27357786266dSMatt Arsenault  ret void
27367786266dSMatt Arsenault}
27377786266dSMatt Arsenault
27387786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__1_3_3_3(ptr addrspace(1) inreg %ptr) {
27397786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__1_3_3_3:
27407786266dSMatt Arsenault; GFX900:       ; %bb.0:
27417786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27427786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
27437786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
27447786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
27457786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
27467786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
27477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
27487786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
27497786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
27507786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
27517786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
27527786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
27537786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
27547786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
27557786266dSMatt Arsenault;
27567786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__1_3_3_3:
27577786266dSMatt Arsenault; GFX90A:       ; %bb.0:
27587786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27597786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
27607786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
27617786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
27627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
27637786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
27647786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
27657786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
27667786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
27677786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s4
27687786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
27697786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
27707786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
27717786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
27727786266dSMatt Arsenault;
27737786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__1_3_3_3:
27747786266dSMatt Arsenault; GFX940:       ; %bb.0:
27757786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27767786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
27777786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
27787786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
27797786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
27807786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
27817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
27827786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
27837786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
27847786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v0, s2
27857786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
27867786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
27877786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
27887786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
27897786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
27907786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
27917786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
27927786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
27937786266dSMatt Arsenault  ret void
27947786266dSMatt Arsenault}
27957786266dSMatt Arsenault
27967786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__2_3_3_3(ptr addrspace(1) inreg %ptr) {
27977786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__2_3_3_3:
27987786266dSMatt Arsenault; GFX900:       ; %bb.0:
27997786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28007786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
28017786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
28027786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
28037786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
28047786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
28057786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
28067786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
28077786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
28087786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
28097786266dSMatt Arsenault;
28107786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__2_3_3_3:
28117786266dSMatt Arsenault; GFX90A:       ; %bb.0:
28127786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28137786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
28147786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
28157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
28167786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
28177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
28187786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
28197786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
28207786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
28217786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
28227786266dSMatt Arsenault;
28237786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__2_3_3_3:
28247786266dSMatt Arsenault; GFX940:       ; %bb.0:
28257786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28267786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
28277786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
28287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
28297786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
28307786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
28317786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
28327786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
28337786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
28347786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
28357786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
28367786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
28377786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
28387786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
28397786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
28407786266dSMatt Arsenault  ret void
28417786266dSMatt Arsenault}
28427786266dSMatt Arsenault
28437786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_u_3_3(ptr addrspace(1) inreg %ptr) {
28447786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_u_3_3:
28457786266dSMatt Arsenault; GFX900:       ; %bb.0:
28467786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
28487786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
28497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
28507786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
28517786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
28527786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
28537786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
28547786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
28557786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
28567786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
28577786266dSMatt Arsenault;
28587786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_u_3_3:
28597786266dSMatt Arsenault; GFX90A:       ; %bb.0:
28607786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28617786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
28627786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
28637786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
28647786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
28657786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
28667786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
28677786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
28687786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
28697786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
28707786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
28717786266dSMatt Arsenault;
28727786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_u_3_3:
28737786266dSMatt Arsenault; GFX940:       ; %bb.0:
28747786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28757786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
28767786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
28777786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
28787786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
28797786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
28807786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
28817786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
28827786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
28837786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
28847786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
28857786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
28867786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
28877786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
28887786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
28897786266dSMatt Arsenault  ret void
28907786266dSMatt Arsenault}
28917786266dSMatt Arsenault
28927786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_0_3_3(ptr addrspace(1) inreg %ptr) {
28937786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_0_3_3:
28947786266dSMatt Arsenault; GFX900:       ; %bb.0:
28957786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28967786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
28977786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
28987786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
28997786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
29007786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
29017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
29027786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
29037786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
29047786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v3, v3, s4
29057786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v3, 16
29067786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
29077786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
29087786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
29097786266dSMatt Arsenault;
29107786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_0_3_3:
29117786266dSMatt Arsenault; GFX90A:       ; %bb.0:
29127786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29137786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
29147786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
29157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
29167786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
29177786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
29187786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
29197786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
29207786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
29217786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v3, v3, s4
29227786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v3, 16
29237786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
29247786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
29257786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
29267786266dSMatt Arsenault;
29277786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_0_3_3:
29287786266dSMatt Arsenault; GFX940:       ; %bb.0:
29297786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29307786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
29317786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
29327786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
29337786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
29347786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
29357786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
29367786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
29377786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
29387786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
29397786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v3, v3, s2
29407786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v3, 16
29417786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
29427786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
29437786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
29447786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
29457786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
29467786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>
29477786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
29487786266dSMatt Arsenault  ret void
29497786266dSMatt Arsenault}
29507786266dSMatt Arsenault
29517786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_1_3_3(ptr addrspace(1) inreg %ptr) {
29527786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_1_3_3:
29537786266dSMatt Arsenault; GFX900:       ; %bb.0:
29547786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29557786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
29567786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
29577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
29587786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
29597786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
29607786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
29617786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
29627786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
29637786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4
29647786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
29657786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
29667786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
29677786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
29687786266dSMatt Arsenault;
29697786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_1_3_3:
29707786266dSMatt Arsenault; GFX90A:       ; %bb.0:
29717786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
29737786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
29747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
29757786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
29767786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
29777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
29787786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
29797786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
29807786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4
29817786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
29827786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
29837786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
29847786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
29857786266dSMatt Arsenault;
29867786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_1_3_3:
29877786266dSMatt Arsenault; GFX940:       ; %bb.0:
29887786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29897786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
29907786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
29917786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
29927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
29937786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
29947786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
29957786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
29967786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
29977786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v0, v1, s2
29987786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
29997786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
30007786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
30017786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
30027786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
30037786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
30047786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
30057786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
30067786266dSMatt Arsenault  ret void
30077786266dSMatt Arsenault}
30087786266dSMatt Arsenault
30097786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_2_3_3(ptr addrspace(1) inreg %ptr) {
30107786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_2_3_3:
30117786266dSMatt Arsenault; GFX900:       ; %bb.0:
30127786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30137786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
30147786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
30157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
30167786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
30177786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
30187786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v0, v0, s4
30197786266dSMatt Arsenault; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
30207786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
30217786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
30227786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
30237786266dSMatt Arsenault;
30247786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_2_3_3:
30257786266dSMatt Arsenault; GFX90A:       ; %bb.0:
30267786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
30287786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
30297786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
30307786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
30317786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
30327786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v0, v0, s4
30337786266dSMatt Arsenault; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
30347786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
30357786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
30367786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
30377786266dSMatt Arsenault;
30387786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_2_3_3:
30397786266dSMatt Arsenault; GFX940:       ; %bb.0:
30407786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30417786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
30427786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
30437786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
30447786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
30457786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
30467786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v0, v0, s2
30477786266dSMatt Arsenault; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
30487786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
30497786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
30507786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
30517786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
30527786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
30537786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
30547786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
30557786266dSMatt Arsenault  ret void
30567786266dSMatt Arsenault}
30577786266dSMatt Arsenault
30587786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_u_3(ptr addrspace(1) inreg %ptr) {
30597786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_u_3:
30607786266dSMatt Arsenault; GFX900:       ; %bb.0:
30617786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30627786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
30637786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
30647786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
30657786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
30667786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
30677786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
30687786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
30697786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
30707786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
30717786266dSMatt Arsenault;
30727786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_u_3:
30737786266dSMatt Arsenault; GFX90A:       ; %bb.0:
30747786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30757786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
30767786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
30777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
30787786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
30797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
30807786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
30817786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
30827786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
30837786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
30847786266dSMatt Arsenault;
30857786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_u_3:
30867786266dSMatt Arsenault; GFX940:       ; %bb.0:
30877786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30887786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
30897786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
30907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
30917786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
30927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
30937786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
30947786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
30957786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
30967786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
30977786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
30987786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
30997786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
31007786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
31017786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
31027786266dSMatt Arsenault  ret void
31037786266dSMatt Arsenault}
31047786266dSMatt Arsenault
31057786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_0_3(ptr addrspace(1) inreg %ptr) {
31067786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_0_3:
31077786266dSMatt Arsenault; GFX900:       ; %bb.0:
31087786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31097786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0xffff
31107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
31117786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
31127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
31137786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
31147786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
31157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
31167786266dSMatt Arsenault; GFX900-NEXT:    v_bfi_b32 v1, s4, v0, v3
31177786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
31187786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
31197786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
31207786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
31217786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
31227786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
31237786266dSMatt Arsenault;
31247786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_0_3:
31257786266dSMatt Arsenault; GFX90A:       ; %bb.0:
31267786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31277786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
31287786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
31297786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
31307786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
31317786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
31327786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
31337786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
31347786266dSMatt Arsenault; GFX90A-NEXT:    v_bfi_b32 v1, s4, v0, v3
31357786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
31367786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
31377786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
31387786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
31397786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
31407786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
31417786266dSMatt Arsenault;
31427786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_0_3:
31437786266dSMatt Arsenault; GFX940:       ; %bb.0:
31447786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31457786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0xffff
31467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
31477786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
31487786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
31497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
31507786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
31517786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
31527786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
31537786266dSMatt Arsenault; GFX940-NEXT:    v_bfi_b32 v1, s2, v0, v3
31547786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
31557786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
31567786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
31577786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
31587786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
31597786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
31607786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
31617786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
31627786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
31637786266dSMatt Arsenault  ret void
31647786266dSMatt Arsenault}
31657786266dSMatt Arsenault
31667786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_1_3(ptr addrspace(1) inreg %ptr) {
31677786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_1_3:
31687786266dSMatt Arsenault; GFX900:       ; %bb.0:
31697786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31707786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
31717786266dSMatt Arsenault; GFX900-NEXT:    ; def v0
31727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
31737786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
31747786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
31757786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
31767786266dSMatt Arsenault; GFX900-NEXT:    ; def v3
31777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
31787786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v1, v3, v0, s4
31797786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v3, v3, s4
31807786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
31817786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
31827786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
31837786266dSMatt Arsenault;
31847786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_1_3:
31857786266dSMatt Arsenault; GFX90A:       ; %bb.0:
31867786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31877786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
31887786266dSMatt Arsenault; GFX90A-NEXT:    ; def v0
31897786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
31907786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
31917786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
31927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
31937786266dSMatt Arsenault; GFX90A-NEXT:    ; def v3
31947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
31957786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v1, v3, v0, s4
31967786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v3, v3, s4
31977786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
31987786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
31997786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
32007786266dSMatt Arsenault;
32017786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_1_3:
32027786266dSMatt Arsenault; GFX940:       ; %bb.0:
32037786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
32057786266dSMatt Arsenault; GFX940-NEXT:    ; def v0
32067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
32077786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
32087786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
32097786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
32107786266dSMatt Arsenault; GFX940-NEXT:    ; def v3
32117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
32127786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
32137786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v1, v3, v0, s2
32147786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v3, v3, s2
32157786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
32167786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
32177786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
32187786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
32197786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
32207786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>
32217786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
32227786266dSMatt Arsenault  ret void
32237786266dSMatt Arsenault}
32247786266dSMatt Arsenault
32257786266dSMatt Arsenaultdefine void @v_shuffle_v4i16_v2i16__3_3_2_3(ptr addrspace(1) inreg %ptr) {
32267786266dSMatt Arsenault; GFX900-LABEL: v_shuffle_v4i16_v2i16__3_3_2_3:
32277786266dSMatt Arsenault; GFX900:       ; %bb.0:
32287786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32297786266dSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
32307786266dSMatt Arsenault; GFX900-NEXT:    v_mov_b32_e32 v2, 0
32317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
32327786266dSMatt Arsenault; GFX900-NEXT:    ; def v1
32337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
32347786266dSMatt Arsenault; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
32357786266dSMatt Arsenault; GFX900-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
32367786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0)
32377786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
32387786266dSMatt Arsenault;
32397786266dSMatt Arsenault; GFX90A-LABEL: v_shuffle_v4i16_v2i16__3_3_2_3:
32407786266dSMatt Arsenault; GFX90A:       ; %bb.0:
32417786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32427786266dSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
32437786266dSMatt Arsenault; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
32447786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
32457786266dSMatt Arsenault; GFX90A-NEXT:    ; def v1
32467786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
32477786266dSMatt Arsenault; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
32487786266dSMatt Arsenault; GFX90A-NEXT:    global_store_dwordx2 v2, v[0:1], s[16:17]
32497786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0)
32507786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
32517786266dSMatt Arsenault;
32527786266dSMatt Arsenault; GFX940-LABEL: v_shuffle_v4i16_v2i16__3_3_2_3:
32537786266dSMatt Arsenault; GFX940:       ; %bb.0:
32547786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32557786266dSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
32567786266dSMatt Arsenault; GFX940-NEXT:    v_mov_b32_e32 v2, 0
32577786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
32587786266dSMatt Arsenault; GFX940-NEXT:    ; def v1
32597786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
32607786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
32617786266dSMatt Arsenault; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
32627786266dSMatt Arsenault; GFX940-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1] sc0 sc1
32637786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0)
32647786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
32657786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=v"()
32667786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=v"()
32677786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
32687786266dSMatt Arsenault  store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8
32697786266dSMatt Arsenault  ret void
32707786266dSMatt Arsenault}
32717786266dSMatt Arsenault
32727786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__u_u_u_u() {
32737786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__u_u_u_u:
32747786266dSMatt Arsenault; GFX9:       ; %bb.0:
32757786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32767786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
3277*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
32787786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
32797786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
32807786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
32817786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> poison
3282*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
32837786266dSMatt Arsenault  ret void
32847786266dSMatt Arsenault}
32857786266dSMatt Arsenault
32867786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__0_u_u_u() {
32877786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__0_u_u_u:
32887786266dSMatt Arsenault; GFX900:       ; %bb.0:
32897786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3291*585858aeSMatt Arsenault; GFX900-NEXT:    ; def s8
32927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
32937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3294*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
32957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
32967786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
32977786266dSMatt Arsenault;
32987786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__0_u_u_u:
32997786266dSMatt Arsenault; GFX90A:       ; %bb.0:
33007786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3302*585858aeSMatt Arsenault; GFX90A-NEXT:    ; def s8
33037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
33047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3305*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
33067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
33077786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
33087786266dSMatt Arsenault;
33097786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__0_u_u_u:
33107786266dSMatt Arsenault; GFX940:       ; %bb.0:
33117786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3313*585858aeSMatt Arsenault; GFX940-NEXT:    ; def s8
33147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
33157786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
33167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3317*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
33187786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
33197786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
33207786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
33217786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
3322*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
33237786266dSMatt Arsenault  ret void
33247786266dSMatt Arsenault}
33257786266dSMatt Arsenault
33267786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__1_u_u_u() {
33277786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__1_u_u_u:
33287786266dSMatt Arsenault; GFX900:       ; %bb.0:
33297786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
33317786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
33327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3333*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
33347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3335*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
33367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
33377786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
33387786266dSMatt Arsenault;
33397786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__1_u_u_u:
33407786266dSMatt Arsenault; GFX90A:       ; %bb.0:
33417786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
33437786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
33447786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3345*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
33467786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3347*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
33487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
33497786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
33507786266dSMatt Arsenault;
33517786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__1_u_u_u:
33527786266dSMatt Arsenault; GFX940:       ; %bb.0:
33537786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
33557786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
33567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3357*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
33587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3359*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
33607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
33617786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
33627786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
33637786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>
3364*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
33657786266dSMatt Arsenault  ret void
33667786266dSMatt Arsenault}
33677786266dSMatt Arsenault
33687786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__2_u_u_u() {
33697786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__2_u_u_u:
33707786266dSMatt Arsenault; GFX9:       ; %bb.0:
33717786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33727786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
3373*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
33747786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
33757786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
33767786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
33777786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>
3378*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
33797786266dSMatt Arsenault  ret void
33807786266dSMatt Arsenault}
33817786266dSMatt Arsenault
33827786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_u_u_u() {
33837786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_u_u_u:
33847786266dSMatt Arsenault; GFX900:       ; %bb.0:
33857786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33867786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
33877786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
33887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3389*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
33907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3391*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
33927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
33937786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
33947786266dSMatt Arsenault;
33957786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_u_u_u:
33967786266dSMatt Arsenault; GFX90A:       ; %bb.0:
33977786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
33997786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
34007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3401*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
34027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3403*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
34047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
34057786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
34067786266dSMatt Arsenault;
34077786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_u_u_u:
34087786266dSMatt Arsenault; GFX940:       ; %bb.0:
34097786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
34117786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
34127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3413*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
34147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3415*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
34167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
34177786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
34187786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
34197786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
34207786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>
3421*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
34227786266dSMatt Arsenault  ret void
34237786266dSMatt Arsenault}
34247786266dSMatt Arsenault
34257786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_0_u_u() {
34267786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_0_u_u:
34277786266dSMatt Arsenault; GFX900:       ; %bb.0:
34287786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34297786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
34307786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
34317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
34327786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s5, 16
34337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
34347786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
34357786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3436*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
34377786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3438*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
34397786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
34407786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
34417786266dSMatt Arsenault;
34427786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_0_u_u:
34437786266dSMatt Arsenault; GFX90A:       ; %bb.0:
34447786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
34467786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
34477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
34487786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s5, 16
34497786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
34507786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
34517786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3452*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
34537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3454*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
34557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
34567786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
34577786266dSMatt Arsenault;
34587786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_0_u_u:
34597786266dSMatt Arsenault; GFX940:       ; %bb.0:
34607786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
34627786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
34637786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
34647786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
34657786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
34667786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
34677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3468*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
34697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3470*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
34717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
34727786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
34737786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
34747786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
34757786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>
3476*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
34777786266dSMatt Arsenault  ret void
34787786266dSMatt Arsenault}
34797786266dSMatt Arsenault
34807786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_1_u_u() {
34817786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_1_u_u:
34827786266dSMatt Arsenault; GFX900:       ; %bb.0:
34837786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
34857786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
34867786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
34877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
34887786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
34897786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3490*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
34917786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3492*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
34937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
34947786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
34957786266dSMatt Arsenault;
34967786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_1_u_u:
34977786266dSMatt Arsenault; GFX90A:       ; %bb.0:
34987786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34997786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
35007786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
35017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
35027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
35037786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
35047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3505*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
35067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3507*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
35087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
35097786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
35107786266dSMatt Arsenault;
35117786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_1_u_u:
35127786266dSMatt Arsenault; GFX940:       ; %bb.0:
35137786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
35157786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
35167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
35177786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
35187786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
35197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3520*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
35217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3522*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
35237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
35247786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
35257786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
35267786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
35277786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>
3528*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
35297786266dSMatt Arsenault  ret void
35307786266dSMatt Arsenault}
35317786266dSMatt Arsenault
35327786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_2_u_u() {
35337786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_2_u_u:
35347786266dSMatt Arsenault; GFX900:       ; %bb.0:
35357786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
35377786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
35387786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
35397786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
3540*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
35417786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3542*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
35437786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
35447786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
35457786266dSMatt Arsenault;
35467786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_2_u_u:
35477786266dSMatt Arsenault; GFX90A:       ; %bb.0:
35487786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35497786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
35507786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
35517786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
35527786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
3553*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
35547786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3555*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
35567786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
35577786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
35587786266dSMatt Arsenault;
35597786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_2_u_u:
35607786266dSMatt Arsenault; GFX940:       ; %bb.0:
35617786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
35637786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
35647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
35657786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
3566*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
35677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3568*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
35697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
35707786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
35717786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
35727786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
35737786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>
3574*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
35757786266dSMatt Arsenault  ret void
35767786266dSMatt Arsenault}
35777786266dSMatt Arsenault
35787786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_u_u() {
35797786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_u_u:
35807786266dSMatt Arsenault; GFX900:       ; %bb.0:
35817786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
35837786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
35847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3585*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
35867786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3587*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
35887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
35897786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
35907786266dSMatt Arsenault;
35917786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_u_u:
35927786266dSMatt Arsenault; GFX90A:       ; %bb.0:
35937786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
35957786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
35967786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3597*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
35987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3599*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
36007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
36017786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
36027786266dSMatt Arsenault;
36037786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_u_u:
36047786266dSMatt Arsenault; GFX940:       ; %bb.0:
36057786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
36077786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
36087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3609*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
36107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3611*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
36127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
36137786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
36147786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
36157786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
36167786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
3617*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
36187786266dSMatt Arsenault  ret void
36197786266dSMatt Arsenault}
36207786266dSMatt Arsenault
36217786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_0_u() {
36227786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_0_u:
36237786266dSMatt Arsenault; GFX900:       ; %bb.0:
36247786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36257786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3626*585858aeSMatt Arsenault; GFX900-NEXT:    ; def s9
36277786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
36287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
36297786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
36307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3631*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
36327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3633*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
36347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
36357786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
36367786266dSMatt Arsenault;
36377786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_0_u:
36387786266dSMatt Arsenault; GFX90A:       ; %bb.0:
36397786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36407786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3641*585858aeSMatt Arsenault; GFX90A-NEXT:    ; def s9
36427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
36437786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
36447786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
36457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3646*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
36477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3648*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
36497786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
36507786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
36517786266dSMatt Arsenault;
36527786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_0_u:
36537786266dSMatt Arsenault; GFX940:       ; %bb.0:
36547786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36557786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3656*585858aeSMatt Arsenault; GFX940-NEXT:    ; def s9
36577786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
36587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
36597786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
36607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3661*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
36627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3663*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
36647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
36657786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
36667786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
36677786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
36687786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
3669*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
36707786266dSMatt Arsenault  ret void
36717786266dSMatt Arsenault}
36727786266dSMatt Arsenault
36737786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_1_u() {
36747786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_1_u:
36757786266dSMatt Arsenault; GFX900:       ; %bb.0:
36767786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
36787786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
36797786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
36807786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
36817786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
36827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3683*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3684*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
36857786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3686*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
36877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
36887786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
36897786266dSMatt Arsenault;
36907786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_1_u:
36917786266dSMatt Arsenault; GFX90A:       ; %bb.0:
36927786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36937786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
36947786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
36957786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
36967786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
36977786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
36987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3699*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3700*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
37017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3702*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
37037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
37047786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
37057786266dSMatt Arsenault;
37067786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_1_u:
37077786266dSMatt Arsenault; GFX940:       ; %bb.0:
37087786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37097786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
37107786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
37117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
37127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
37137786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
37147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3715*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3716*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
37177786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3718*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
37197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
37207786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
37217786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
37227786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
37237786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>
3724*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
37257786266dSMatt Arsenault  ret void
37267786266dSMatt Arsenault}
37277786266dSMatt Arsenault
37287786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_2_u() {
37297786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__3_3_2_u:
37307786266dSMatt Arsenault; GFX9:       ; %bb.0:
37317786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37327786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
3733*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s9
37347786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
3735*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s8, s9, s9
37367786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
3737*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
37387786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
37397786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
37407786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
37417786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
37427786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
3743*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
37447786266dSMatt Arsenault  ret void
37457786266dSMatt Arsenault}
37467786266dSMatt Arsenault
37477786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_3_u() {
37487786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_3_u:
37497786266dSMatt Arsenault; GFX900:       ; %bb.0:
37507786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37517786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
37527786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
37537786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3754*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3755*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
37567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3757*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
37587786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
37597786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
37607786266dSMatt Arsenault;
37617786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_3_u:
37627786266dSMatt Arsenault; GFX90A:       ; %bb.0:
37637786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37647786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
37657786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
37667786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3767*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3768*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
37697786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3770*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
37717786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
37727786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
37737786266dSMatt Arsenault;
37747786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_3_u:
37757786266dSMatt Arsenault; GFX940:       ; %bb.0:
37767786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37777786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
37787786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
37797786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3780*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3781*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
37827786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3783*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
37847786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
37857786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
37867786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
37877786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
37887786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
3789*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
37907786266dSMatt Arsenault  ret void
37917786266dSMatt Arsenault}
37927786266dSMatt Arsenault
37937786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_3_0() {
37947786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_3_0:
37957786266dSMatt Arsenault; GFX900:       ; %bb.0:
37967786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37977786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
37987786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
37997786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
38007786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
38017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
38027786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
38037786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3804*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s6, s4
3805*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
38067786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3807*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
38087786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
38097786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
38107786266dSMatt Arsenault;
38117786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_3_0:
38127786266dSMatt Arsenault; GFX90A:       ; %bb.0:
38137786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38147786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
38157786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
38167786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
38177786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
38187786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
38197786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
38207786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3821*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s6, s4
3822*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
38237786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3824*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
38257786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
38267786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
38277786266dSMatt Arsenault;
38287786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_3_0:
38297786266dSMatt Arsenault; GFX940:       ; %bb.0:
38307786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
38327786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
38337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
38347786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
38357786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
38367786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
38377786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3838*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s2, s0
3839*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
38407786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3841*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
38427786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
38437786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
38447786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
38457786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
38467786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
3847*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
38487786266dSMatt Arsenault  ret void
38497786266dSMatt Arsenault}
38507786266dSMatt Arsenault
38517786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_3_1() {
38527786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_3_1:
38537786266dSMatt Arsenault; GFX900:       ; %bb.0:
38547786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38557786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
38567786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
38577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
38587786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
38597786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
38607786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3861*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s5, s4
3862*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
38637786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3864*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
38657786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
38667786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
38677786266dSMatt Arsenault;
38687786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_3_1:
38697786266dSMatt Arsenault; GFX90A:       ; %bb.0:
38707786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38717786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
38727786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
38737786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
38747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
38757786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
38767786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3877*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s5, s4
3878*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
38797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3880*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
38817786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
38827786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
38837786266dSMatt Arsenault;
38847786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_3_1:
38857786266dSMatt Arsenault; GFX940:       ; %bb.0:
38867786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38877786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
38887786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
38897786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
38907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
38917786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
38927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3893*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s1, s0
3894*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
38957786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3896*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
38977786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
38987786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
38997786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
39007786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
39017786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
3902*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
39037786266dSMatt Arsenault  ret void
39047786266dSMatt Arsenault}
39057786266dSMatt Arsenault
39067786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_3_2() {
39077786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_3_2:
39087786266dSMatt Arsenault; GFX900:       ; %bb.0:
39097786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
39117786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
39127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
39137786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
3914*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s5, s4
3915*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
39167786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3917*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
39187786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
39197786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
39207786266dSMatt Arsenault;
39217786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_3_2:
39227786266dSMatt Arsenault; GFX90A:       ; %bb.0:
39237786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39247786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
39257786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
39267786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
39277786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
3928*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s5, s4
3929*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
39307786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3931*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
39327786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
39337786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
39347786266dSMatt Arsenault;
39357786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_3_2:
39367786266dSMatt Arsenault; GFX940:       ; %bb.0:
39377786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
39397786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
39407786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
39417786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
3942*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s1, s0
3943*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
39447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3945*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
39467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
39477786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
39487786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
39497786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
39507786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>
3951*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
39527786266dSMatt Arsenault  ret void
39537786266dSMatt Arsenault}
39547786266dSMatt Arsenault
39557786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_3_3() {
39567786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_3_3:
39577786266dSMatt Arsenault; GFX900:       ; %bb.0:
39587786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39597786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
39607786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
39617786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
3962*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3963*585858aeSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s9, s8
39647786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
3965*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
39667786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
39677786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
39687786266dSMatt Arsenault;
39697786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_3_3:
39707786266dSMatt Arsenault; GFX90A:       ; %bb.0:
39717786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
39737786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
39747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
3975*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3976*585858aeSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s9, s8
39777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
3978*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
39797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
39807786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
39817786266dSMatt Arsenault;
39827786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_3_3:
39837786266dSMatt Arsenault; GFX940:       ; %bb.0:
39847786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39857786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
39867786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
39877786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
3988*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
3989*585858aeSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s9, s8
39907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
3991*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
39927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
39937786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
39947786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
39957786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
39967786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
3997*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
39987786266dSMatt Arsenault  ret void
39997786266dSMatt Arsenault}
40007786266dSMatt Arsenault
40017786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__u_0_0_0() {
40027786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__u_0_0_0:
40037786266dSMatt Arsenault; GFX900:       ; %bb.0:
40047786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40057786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
40067786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
40077786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4008*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4009*585858aeSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s9, s8
40107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4011*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
40127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
40137786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
40147786266dSMatt Arsenault;
40157786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__u_0_0_0:
40167786266dSMatt Arsenault; GFX90A:       ; %bb.0:
40177786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40187786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
40197786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
40207786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4021*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4022*585858aeSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s9, s8
40237786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4024*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
40257786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
40267786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
40277786266dSMatt Arsenault;
40287786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__u_0_0_0:
40297786266dSMatt Arsenault; GFX940:       ; %bb.0:
40307786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
40327786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
40337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4034*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s0
4035*585858aeSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s9, s8
40367786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4037*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
40387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
40397786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
40407786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
40417786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
4042*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
40437786266dSMatt Arsenault  ret void
40447786266dSMatt Arsenault}
40457786266dSMatt Arsenault
40467786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__0_0_0_0() {
40477786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__0_0_0_0:
40487786266dSMatt Arsenault; GFX900:       ; %bb.0:
40497786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40507786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
40517786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
40527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4053*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4054*585858aeSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s9, s8
40557786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4056*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
40577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
40587786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
40597786266dSMatt Arsenault;
40607786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__0_0_0_0:
40617786266dSMatt Arsenault; GFX90A:       ; %bb.0:
40627786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40637786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
40647786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
40657786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4066*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4067*585858aeSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s9, s8
40687786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4069*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
40707786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
40717786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
40727786266dSMatt Arsenault;
40737786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__0_0_0_0:
40747786266dSMatt Arsenault; GFX940:       ; %bb.0:
40757786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40767786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
40777786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
40787786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4079*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s0
4080*585858aeSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s9, s8
40817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4082*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
40837786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
40847786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
40857786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
40867786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> zeroinitializer
4087*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
40887786266dSMatt Arsenault  ret void
40897786266dSMatt Arsenault}
40907786266dSMatt Arsenault
40917786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__1_0_0_0() {
40927786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__1_0_0_0:
40937786266dSMatt Arsenault; GFX900:       ; %bb.0:
40947786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
40967786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
40977786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
40987786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
4099*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4100*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
41017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4102*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
41037786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
41047786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
41057786266dSMatt Arsenault;
41067786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__1_0_0_0:
41077786266dSMatt Arsenault; GFX90A:       ; %bb.0:
41087786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
41107786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
41117786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
41127786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
4113*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4114*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
41157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4116*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
41177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
41187786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
41197786266dSMatt Arsenault;
41207786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__1_0_0_0:
41217786266dSMatt Arsenault; GFX940:       ; %bb.0:
41227786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
41247786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
41257786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
41267786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
4127*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
4128*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
41297786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4130*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
41317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
41327786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
41337786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
41347786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
4135*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
41367786266dSMatt Arsenault  ret void
41377786266dSMatt Arsenault}
41387786266dSMatt Arsenault
41397786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__2_0_0_0() {
41407786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__2_0_0_0:
41417786266dSMatt Arsenault; GFX900:       ; %bb.0:
41427786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41437786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
41447786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
41457786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4146*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4147*585858aeSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s9, s8
41487786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4149*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
41507786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
41517786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
41527786266dSMatt Arsenault;
41537786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__2_0_0_0:
41547786266dSMatt Arsenault; GFX90A:       ; %bb.0:
41557786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41567786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
41577786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
41587786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4159*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
4160*585858aeSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s9, s8
41617786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4162*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
41637786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
41647786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
41657786266dSMatt Arsenault;
41667786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__2_0_0_0:
41677786266dSMatt Arsenault; GFX940:       ; %bb.0:
41687786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
41707786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
41717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4172*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s0
4173*585858aeSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s9, s8
41747786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4175*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
41767786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
41777786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
41787786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
41797786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
4180*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
41817786266dSMatt Arsenault  ret void
41827786266dSMatt Arsenault}
41837786266dSMatt Arsenault
41847786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_0_0_0() {
41857786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_0_0_0:
41867786266dSMatt Arsenault; GFX900:       ; %bb.0:
41877786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
41897786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
41907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
41917786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s5, 16
41927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
41937786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
41947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4195*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4196*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
41977786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4198*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
41997786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
42007786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
42017786266dSMatt Arsenault;
42027786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_0_0_0:
42037786266dSMatt Arsenault; GFX90A:       ; %bb.0:
42047786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42057786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
42067786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
42077786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
42087786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s5, 16
42097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
42107786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
42117786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4212*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4213*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
42147786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4215*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
42167786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
42177786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
42187786266dSMatt Arsenault;
42197786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_0_0_0:
42207786266dSMatt Arsenault; GFX940:       ; %bb.0:
42217786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42227786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
42237786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
42247786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
42257786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
42267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
42277786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
42287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4229*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
4230*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
42317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4232*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
42337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
42347786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
42357786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
42367786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
42377786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
4238*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
42397786266dSMatt Arsenault  ret void
42407786266dSMatt Arsenault}
42417786266dSMatt Arsenault
42427786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_u_0_0() {
42437786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_u_0_0:
42447786266dSMatt Arsenault; GFX900:       ; %bb.0:
42457786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42467786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
42477786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
42487786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
42497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
42507786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
42517786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4252*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s5, 16
4253*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
42547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4255*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
42567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
42577786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
42587786266dSMatt Arsenault;
42597786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_u_0_0:
42607786266dSMatt Arsenault; GFX90A:       ; %bb.0:
42617786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
42637786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
42647786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
42657786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
42667786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
42677786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4268*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s5, 16
4269*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
42707786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4271*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
42727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
42737786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
42747786266dSMatt Arsenault;
42757786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_u_0_0:
42767786266dSMatt Arsenault; GFX940:       ; %bb.0:
42777786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42787786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
42797786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
42807786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
42817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
42827786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
42837786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4284*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s1, 16
4285*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
42867786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4287*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
42887786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
42897786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
42907786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
42917786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
42927786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>
4293*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
42947786266dSMatt Arsenault  ret void
42957786266dSMatt Arsenault}
42967786266dSMatt Arsenault
42977786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_1_0_0() {
42987786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_1_0_0:
42997786266dSMatt Arsenault; GFX900:       ; %bb.0:
43007786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
43027786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
43037786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
43047786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
43057786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
43067786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4307*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
4308*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
43097786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4310*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
43117786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
43127786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
43137786266dSMatt Arsenault;
43147786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_1_0_0:
43157786266dSMatt Arsenault; GFX90A:       ; %bb.0:
43167786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
43187786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
43197786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
43207786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
43217786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
43227786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4323*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
4324*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
43257786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4326*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
43277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
43287786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
43297786266dSMatt Arsenault;
43307786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_1_0_0:
43317786266dSMatt Arsenault; GFX940:       ; %bb.0:
43327786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
43347786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
43357786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
43367786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
43377786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
43387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4339*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
4340*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
43417786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4342*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
43437786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
43447786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
43457786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
43467786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
43477786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>
4348*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
43497786266dSMatt Arsenault  ret void
43507786266dSMatt Arsenault}
43517786266dSMatt Arsenault
43527786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_2_0_0() {
43537786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_2_0_0:
43547786266dSMatt Arsenault; GFX900:       ; %bb.0:
43557786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
43577786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
43587786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
43597786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
43607786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
43617786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
43627786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4363*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
4364*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
43657786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4366*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
43677786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
43687786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
43697786266dSMatt Arsenault;
43707786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_2_0_0:
43717786266dSMatt Arsenault; GFX90A:       ; %bb.0:
43727786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43737786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
43747786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
43757786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
43767786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
43777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
43787786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
43797786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4380*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
4381*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
43827786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4383*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
43847786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
43857786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
43867786266dSMatt Arsenault;
43877786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_2_0_0:
43887786266dSMatt Arsenault; GFX940:       ; %bb.0:
43897786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
43907786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
43917786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
43927786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
43937786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
43947786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
43957786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
43967786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4397*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s2, s1
4398*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
43997786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4400*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
44017786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
44027786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
44037786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
44047786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
44057786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>
4406*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
44077786266dSMatt Arsenault  ret void
44087786266dSMatt Arsenault}
44097786266dSMatt Arsenault
44107786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_0_0() {
44117786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_0_0:
44127786266dSMatt Arsenault; GFX900:       ; %bb.0:
44137786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44147786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
44157786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
44167786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
44177786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
44187786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
44197786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4420*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
4421*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
44227786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4423*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
44247786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
44257786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
44267786266dSMatt Arsenault;
44277786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_0_0:
44287786266dSMatt Arsenault; GFX90A:       ; %bb.0:
44297786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44307786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
44317786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
44327786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
44337786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
44347786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
44357786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4436*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
4437*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
44387786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4439*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
44407786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
44417786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
44427786266dSMatt Arsenault;
44437786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_0_0:
44447786266dSMatt Arsenault; GFX940:       ; %bb.0:
44457786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44467786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
44477786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
44487786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
44497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
44507786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
44517786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4452*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
4453*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
44547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4455*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
44567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
44577786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
44587786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
44597786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
44607786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
4461*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
44627786266dSMatt Arsenault  ret void
44637786266dSMatt Arsenault}
44647786266dSMatt Arsenault
44657786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_u_0() {
44667786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_u_0:
44677786266dSMatt Arsenault; GFX900:       ; %bb.0:
44687786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44697786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
44707786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
44717786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
44727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
44737786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
44747786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4475*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
4476*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshl_b32 s9, s4, 16
44777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4478*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
44797786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
44807786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
44817786266dSMatt Arsenault;
44827786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_u_0:
44837786266dSMatt Arsenault; GFX90A:       ; %bb.0:
44847786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44857786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
44867786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
44877786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
44887786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
44897786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
44907786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4491*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
4492*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshl_b32 s9, s4, 16
44937786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4494*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
44957786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
44967786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
44977786266dSMatt Arsenault;
44987786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_u_0:
44997786266dSMatt Arsenault; GFX940:       ; %bb.0:
45007786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45017786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
45027786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
45037786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
45047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
45057786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
45067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4507*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
4508*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshl_b32 s9, s0, 16
45097786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4510*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
45117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
45127786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
45137786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
45147786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
45157786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>
4516*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
45177786266dSMatt Arsenault  ret void
45187786266dSMatt Arsenault}
45197786266dSMatt Arsenault
45207786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_1_0() {
45217786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_1_0:
45227786266dSMatt Arsenault; GFX900:       ; %bb.0:
45237786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45247786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
45257786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
45267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
45277786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s4, 16
45287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
45297786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
45307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4531*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s6, s4
4532*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
45337786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4534*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
45357786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
45367786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
45377786266dSMatt Arsenault;
45387786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_1_0:
45397786266dSMatt Arsenault; GFX90A:       ; %bb.0:
45407786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45417786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
45427786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
45437786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
45447786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s4, 16
45457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
45467786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
45477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4548*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s6, s4
4549*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
45507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4551*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
45527786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
45537786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
45547786266dSMatt Arsenault;
45557786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_1_0:
45567786266dSMatt Arsenault; GFX940:       ; %bb.0:
45577786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
45597786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
45607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
45617786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s0, 16
45627786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
45637786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
45647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4565*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s2, s0
4566*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
45677786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4568*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
45697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
45707786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
45717786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
45727786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
45737786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>
4574*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
45757786266dSMatt Arsenault  ret void
45767786266dSMatt Arsenault}
45777786266dSMatt Arsenault
45787786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_2_0() {
45797786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_2_0:
45807786266dSMatt Arsenault; GFX900:       ; %bb.0:
45817786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
45837786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
45847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
45857786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
45867786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
45877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4588*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s5, s4
4589*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
45907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4591*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
45927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
45937786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
45947786266dSMatt Arsenault;
45957786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_2_0:
45967786266dSMatt Arsenault; GFX90A:       ; %bb.0:
45977786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
45997786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
46007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
46017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
46027786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
46037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4604*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s5, s4
4605*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
46067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4607*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
46087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
46097786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
46107786266dSMatt Arsenault;
46117786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_2_0:
46127786266dSMatt Arsenault; GFX940:       ; %bb.0:
46137786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
46157786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
46167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
46177786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
46187786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
46197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4620*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s1, s0
4621*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
46227786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4623*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
46247786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
46257786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
46267786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
46277786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
46287786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>
4629*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
46307786266dSMatt Arsenault  ret void
46317786266dSMatt Arsenault}
46327786266dSMatt Arsenault
46337786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__u_1_1_1() {
46347786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__u_1_1_1:
46357786266dSMatt Arsenault; GFX9:       ; %bb.0:
46367786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46377786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4638*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s8
46397786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
4640*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s9, s8, s8
46417786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4642*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
46437786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
46447786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
46457786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
46467786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
4647*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
46487786266dSMatt Arsenault  ret void
46497786266dSMatt Arsenault}
46507786266dSMatt Arsenault
46517786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__0_1_1_1() {
46527786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__0_1_1_1:
46537786266dSMatt Arsenault; GFX9:       ; %bb.0:
46547786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46557786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4656*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s8
46577786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
4658*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s9, s8, s8
46597786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4660*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
46617786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
46627786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
46637786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
46647786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
4665*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
46667786266dSMatt Arsenault  ret void
46677786266dSMatt Arsenault}
46687786266dSMatt Arsenault
46697786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__1_1_1_1() {
46707786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__1_1_1_1:
46717786266dSMatt Arsenault; GFX900:       ; %bb.0:
46727786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46737786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
46747786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
46757786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4676*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
4677*585858aeSMatt Arsenault; GFX900-NEXT:    s_mov_b32 s9, s8
46787786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4679*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
46807786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
46817786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
46827786266dSMatt Arsenault;
46837786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__1_1_1_1:
46847786266dSMatt Arsenault; GFX90A:       ; %bb.0:
46857786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46867786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
46877786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
46887786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4689*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
4690*585858aeSMatt Arsenault; GFX90A-NEXT:    s_mov_b32 s9, s8
46917786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4692*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
46937786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
46947786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
46957786266dSMatt Arsenault;
46967786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__1_1_1_1:
46977786266dSMatt Arsenault; GFX940:       ; %bb.0:
46987786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46997786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
47007786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
47017786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4702*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
4703*585858aeSMatt Arsenault; GFX940-NEXT:    s_mov_b32 s9, s8
47047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4705*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
47067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
47077786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
47087786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
47097786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
4710*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
47117786266dSMatt Arsenault  ret void
47127786266dSMatt Arsenault}
47137786266dSMatt Arsenault
47147786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__2_1_1_1() {
47157786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__2_1_1_1:
47167786266dSMatt Arsenault; GFX9:       ; %bb.0:
47177786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47187786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4719*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s8
47207786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
4721*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s9, s8, s8
47227786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
4723*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
47247786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
47257786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
47267786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
47277786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
4728*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
47297786266dSMatt Arsenault  ret void
47307786266dSMatt Arsenault}
47317786266dSMatt Arsenault
47327786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_1_1_1() {
47337786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_1_1_1:
47347786266dSMatt Arsenault; GFX900:       ; %bb.0:
47357786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
47377786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
47387786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
47397786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
47407786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
47417786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4742*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
4743*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
47447786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4745*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
47467786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
47477786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
47487786266dSMatt Arsenault;
47497786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_1_1_1:
47507786266dSMatt Arsenault; GFX90A:       ; %bb.0:
47517786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47527786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
47537786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
47547786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
47557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
47567786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
47577786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4758*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
4759*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
47607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4761*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
47627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
47637786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
47647786266dSMatt Arsenault;
47657786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_1_1_1:
47667786266dSMatt Arsenault; GFX940:       ; %bb.0:
47677786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
47697786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
47707786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
47717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
47727786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
47737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4774*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
4775*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
47767786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4777*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
47787786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
47797786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
47807786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
47817786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
47827786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
4783*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
47847786266dSMatt Arsenault  ret void
47857786266dSMatt Arsenault}
47867786266dSMatt Arsenault
47877786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_u_1_1() {
47887786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_u_1_1:
47897786266dSMatt Arsenault; GFX900:       ; %bb.0:
47907786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47917786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
47927786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
47937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
47947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
47957786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
47967786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4797*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s5, 16
4798*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
47997786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4800*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
48017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
48027786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
48037786266dSMatt Arsenault;
48047786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_u_1_1:
48057786266dSMatt Arsenault; GFX90A:       ; %bb.0:
48067786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48077786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
48087786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
48097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
48107786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
48117786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
48127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4813*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s5, 16
4814*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
48157786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4816*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
48177786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
48187786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
48197786266dSMatt Arsenault;
48207786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_u_1_1:
48217786266dSMatt Arsenault; GFX940:       ; %bb.0:
48227786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
48247786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
48257786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
48267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
48277786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
48287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4829*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s1, 16
4830*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
48317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4832*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
48337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
48347786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
48357786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
48367786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
48377786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>
4838*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
48397786266dSMatt Arsenault  ret void
48407786266dSMatt Arsenault}
48417786266dSMatt Arsenault
48427786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_0_1_1() {
48437786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_0_1_1:
48447786266dSMatt Arsenault; GFX900:       ; %bb.0:
48457786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48467786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
48477786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
48487786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
48497786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s5, 16
48507786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
48517786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
48527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4853*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4854*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
48557786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4856*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
48577786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
48587786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
48597786266dSMatt Arsenault;
48607786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_0_1_1:
48617786266dSMatt Arsenault; GFX90A:       ; %bb.0:
48627786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48637786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
48647786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
48657786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
48667786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s5, 16
48677786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
48687786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
48697786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4870*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
4871*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
48727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4873*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
48747786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
48757786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
48767786266dSMatt Arsenault;
48777786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_0_1_1:
48787786266dSMatt Arsenault; GFX940:       ; %bb.0:
48797786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48807786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
48817786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
48827786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
48837786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
48847786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
48857786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
48867786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4887*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
4888*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
48897786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4890*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
48917786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
48927786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
48937786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
48947786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
48957786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>
4896*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
48977786266dSMatt Arsenault  ret void
48987786266dSMatt Arsenault}
48997786266dSMatt Arsenault
49007786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_2_1_1() {
49017786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_2_1_1:
49027786266dSMatt Arsenault; GFX900:       ; %bb.0:
49037786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49047786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
49057786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
49067786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
49077786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
49087786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
49097786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
49107786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4911*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
4912*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
49137786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4914*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
49157786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
49167786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
49177786266dSMatt Arsenault;
49187786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_2_1_1:
49197786266dSMatt Arsenault; GFX90A:       ; %bb.0:
49207786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49217786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
49227786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
49237786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
49247786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
49257786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
49267786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
49277786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4928*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
4929*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
49307786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4931*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
49327786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
49337786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
49347786266dSMatt Arsenault;
49357786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_2_1_1:
49367786266dSMatt Arsenault; GFX940:       ; %bb.0:
49377786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
49397786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
49407786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
49417786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
49427786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
49437786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
49447786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
4945*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s2, s1
4946*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
49477786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
4948*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
49497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
49507786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
49517786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
49527786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
49537786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>
4954*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
49557786266dSMatt Arsenault  ret void
49567786266dSMatt Arsenault}
49577786266dSMatt Arsenault
49587786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_1_1() {
49597786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_1_1:
49607786266dSMatt Arsenault; GFX900:       ; %bb.0:
49617786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49627786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
49637786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
49647786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
49657786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
49667786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
49677786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
4968*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
4969*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
49707786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
4971*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
49727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
49737786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
49747786266dSMatt Arsenault;
49757786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_1_1:
49767786266dSMatt Arsenault; GFX90A:       ; %bb.0:
49777786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49787786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
49797786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
49807786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
49817786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
49827786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
49837786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
4984*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
4985*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
49867786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
4987*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
49887786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
49897786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
49907786266dSMatt Arsenault;
49917786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_1_1:
49927786266dSMatt Arsenault; GFX940:       ; %bb.0:
49937786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49947786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
49957786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
49967786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
49977786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
49987786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
49997786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5000*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
5001*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
50027786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5003*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
50047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
50057786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
50067786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
50077786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
50087786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
5009*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
50107786266dSMatt Arsenault  ret void
50117786266dSMatt Arsenault}
50127786266dSMatt Arsenault
50137786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_u_1() {
50147786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_u_1:
50157786266dSMatt Arsenault; GFX900:       ; %bb.0:
50167786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50177786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5018*585858aeSMatt Arsenault; GFX900-NEXT:    ; def s9
50197786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
50207786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
50217786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
50227786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5023*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
50247786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5025*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
50267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
50277786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
50287786266dSMatt Arsenault;
50297786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_u_1:
50307786266dSMatt Arsenault; GFX90A:       ; %bb.0:
50317786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50327786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5033*585858aeSMatt Arsenault; GFX90A-NEXT:    ; def s9
50347786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
50357786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
50367786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
50377786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5038*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
50397786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5040*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
50417786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
50427786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
50437786266dSMatt Arsenault;
50447786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_u_1:
50457786266dSMatt Arsenault; GFX940:       ; %bb.0:
50467786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50477786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5048*585858aeSMatt Arsenault; GFX940-NEXT:    ; def s9
50497786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
50507786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
50517786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
50527786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5053*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
50547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5055*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
50567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
50577786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
50587786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
50597786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
50607786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
5061*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
50627786266dSMatt Arsenault  ret void
50637786266dSMatt Arsenault}
50647786266dSMatt Arsenault
50657786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_0_1() {
50667786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_0_1:
50677786266dSMatt Arsenault; GFX900:       ; %bb.0:
50687786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50697786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5070*585858aeSMatt Arsenault; GFX900-NEXT:    ; def s9
50717786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
50727786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
50737786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
50747786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5075*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
50767786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5077*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
50787786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
50797786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
50807786266dSMatt Arsenault;
50817786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_0_1:
50827786266dSMatt Arsenault; GFX90A:       ; %bb.0:
50837786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50847786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5085*585858aeSMatt Arsenault; GFX90A-NEXT:    ; def s9
50867786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
50877786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
50887786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
50897786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5090*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
50917786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5092*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
50937786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
50947786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
50957786266dSMatt Arsenault;
50967786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_0_1:
50977786266dSMatt Arsenault; GFX940:       ; %bb.0:
50987786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50997786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5100*585858aeSMatt Arsenault; GFX940-NEXT:    ; def s9
51017786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
51027786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
51037786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
51047786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5105*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
51067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5107*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
51087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
51097786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
51107786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
51117786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
51127786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
5113*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
51147786266dSMatt Arsenault  ret void
51157786266dSMatt Arsenault}
51167786266dSMatt Arsenault
51177786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_2_1() {
51187786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_2_1:
51197786266dSMatt Arsenault; GFX900:       ; %bb.0:
51207786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51217786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
51227786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
51237786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
51247786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
51257786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
51267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5127*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_lh_b32_b16 s9, s5, s4
5128*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
51297786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5130*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
51317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
51327786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
51337786266dSMatt Arsenault;
51347786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_2_1:
51357786266dSMatt Arsenault; GFX90A:       ; %bb.0:
51367786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51377786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
51387786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
51397786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
51407786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
51417786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
51427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5143*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_lh_b32_b16 s9, s5, s4
5144*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
51457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5146*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
51477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
51487786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
51497786266dSMatt Arsenault;
51507786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_2_1:
51517786266dSMatt Arsenault; GFX940:       ; %bb.0:
51527786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51537786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
51547786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
51557786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
51567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
51577786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
51587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5159*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_lh_b32_b16 s9, s1, s0
5160*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
51617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5162*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
51637786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
51647786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
51657786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
51667786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
51677786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>
5168*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
51697786266dSMatt Arsenault  ret void
51707786266dSMatt Arsenault}
51717786266dSMatt Arsenault
51727786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__u_2_2_2() {
51737786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__u_2_2_2:
51747786266dSMatt Arsenault; GFX9:       ; %bb.0:
51757786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51767786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5177*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
51787786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
51797786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
51807786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
51817786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
5182*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
51837786266dSMatt Arsenault  ret void
51847786266dSMatt Arsenault}
51857786266dSMatt Arsenault
51867786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__0_2_2_2() {
51877786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__0_2_2_2:
51887786266dSMatt Arsenault; GFX900:       ; %bb.0:
51897786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5191*585858aeSMatt Arsenault; GFX900-NEXT:    ; def s8
51927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
51937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5194*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
51957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
51967786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
51977786266dSMatt Arsenault;
51987786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__0_2_2_2:
51997786266dSMatt Arsenault; GFX90A:       ; %bb.0:
52007786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52017786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5202*585858aeSMatt Arsenault; GFX90A-NEXT:    ; def s8
52037786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
52047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5205*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
52067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
52077786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
52087786266dSMatt Arsenault;
52097786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__0_2_2_2:
52107786266dSMatt Arsenault; GFX940:       ; %bb.0:
52117786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52127786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5213*585858aeSMatt Arsenault; GFX940-NEXT:    ; def s8
52147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
52157786266dSMatt Arsenault; GFX940-NEXT:    s_nop 0
52167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5217*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
52187786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
52197786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
52207786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
52217786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
5222*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
52237786266dSMatt Arsenault  ret void
52247786266dSMatt Arsenault}
52257786266dSMatt Arsenault
52267786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__1_2_2_2() {
52277786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__1_2_2_2:
52287786266dSMatt Arsenault; GFX900:       ; %bb.0:
52297786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52307786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
52317786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
52327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5233*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
52347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5235*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
52367786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
52377786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
52387786266dSMatt Arsenault;
52397786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__1_2_2_2:
52407786266dSMatt Arsenault; GFX90A:       ; %bb.0:
52417786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
52437786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
52447786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5245*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
52467786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5247*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
52487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
52497786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
52507786266dSMatt Arsenault;
52517786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__1_2_2_2:
52527786266dSMatt Arsenault; GFX940:       ; %bb.0:
52537786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52547786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
52557786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
52567786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5257*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
52587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5259*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
52607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
52617786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
52627786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
52637786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
5264*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
52657786266dSMatt Arsenault  ret void
52667786266dSMatt Arsenault}
52677786266dSMatt Arsenault
52687786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__2_2_2_2() {
52697786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__2_2_2_2:
52707786266dSMatt Arsenault; GFX9:       ; %bb.0:
52717786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52727786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5273*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
52747786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
52757786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
52767786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
52777786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
5278*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
52797786266dSMatt Arsenault  ret void
52807786266dSMatt Arsenault}
52817786266dSMatt Arsenault
52827786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_2_2_2() {
52837786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_2_2_2:
52847786266dSMatt Arsenault; GFX900:       ; %bb.0:
52857786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52867786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
52877786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
52887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
52897786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
5290*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
5291*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
52927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5293*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
52947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
52957786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
52967786266dSMatt Arsenault;
52977786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_2_2_2:
52987786266dSMatt Arsenault; GFX90A:       ; %bb.0:
52997786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
53017786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
53027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
53037786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
5304*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
5305*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
53067786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5307*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
53087786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
53097786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
53107786266dSMatt Arsenault;
53117786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_2_2_2:
53127786266dSMatt Arsenault; GFX940:       ; %bb.0:
53137786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
53157786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
53167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
53177786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
5318*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
5319*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
53207786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5321*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
53227786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
53237786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
53247786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
53257786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
53267786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
5327*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
53287786266dSMatt Arsenault  ret void
53297786266dSMatt Arsenault}
53307786266dSMatt Arsenault
53317786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_u_2_2() {
53327786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_u_2_2:
53337786266dSMatt Arsenault; GFX900:       ; %bb.0:
53347786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53357786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
53367786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
53377786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5338*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
5339*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
53407786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5341*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
53427786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
53437786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
53447786266dSMatt Arsenault;
53457786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_u_2_2:
53467786266dSMatt Arsenault; GFX90A:       ; %bb.0:
53477786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
53497786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
53507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5351*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
5352*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
53537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5354*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
53557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
53567786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
53577786266dSMatt Arsenault;
53587786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_u_2_2:
53597786266dSMatt Arsenault; GFX940:       ; %bb.0:
53607786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
53627786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
53637786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5364*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
5365*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
53667786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5367*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
53687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
53697786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
53707786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
53717786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
53727786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
5373*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
53747786266dSMatt Arsenault  ret void
53757786266dSMatt Arsenault}
53767786266dSMatt Arsenault
53777786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_0_2_2() {
53787786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_0_2_2:
53797786266dSMatt Arsenault; GFX900:       ; %bb.0:
53807786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53817786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
53827786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
53837786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
53847786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
53857786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
53867786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
53877786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5388*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s6, s4
5389*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s5, s5
53907786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5391*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
53927786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
53937786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
53947786266dSMatt Arsenault;
53957786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_0_2_2:
53967786266dSMatt Arsenault; GFX90A:       ; %bb.0:
53977786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
53997786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
54007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
54017786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
54027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
54037786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
54047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5405*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s6, s4
5406*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s5, s5
54077786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5408*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
54097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
54107786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
54117786266dSMatt Arsenault;
54127786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_0_2_2:
54137786266dSMatt Arsenault; GFX940:       ; %bb.0:
54147786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54157786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
54167786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
54177786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
54187786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
54197786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
54207786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
54217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5422*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s2, s0
5423*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s1, s1
54247786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5425*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
54267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
54277786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
54287786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
54297786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
54307786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>
5431*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
54327786266dSMatt Arsenault  ret void
54337786266dSMatt Arsenault}
54347786266dSMatt Arsenault
54357786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_1_2_2() {
54367786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_1_2_2:
54377786266dSMatt Arsenault; GFX900:       ; %bb.0:
54387786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54397786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
54407786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
54417786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
54427786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
54437786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
54447786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5445*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
5446*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s5, s5
54477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5448*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
54497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
54507786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
54517786266dSMatt Arsenault;
54527786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_1_2_2:
54537786266dSMatt Arsenault; GFX90A:       ; %bb.0:
54547786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
54567786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
54577786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
54587786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
54597786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
54607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5461*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
5462*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s5, s5
54637786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5464*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
54657786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
54667786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
54677786266dSMatt Arsenault;
54687786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_1_2_2:
54697786266dSMatt Arsenault; GFX940:       ; %bb.0:
54707786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
54727786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
54737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
54747786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
54757786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
54767786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5477*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
5478*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s1, s1
54797786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5480*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
54817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
54827786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
54837786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
54847786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
54857786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
5486*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
54877786266dSMatt Arsenault  ret void
54887786266dSMatt Arsenault}
54897786266dSMatt Arsenault
54907786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_2_2() {
54917786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_2_2:
54927786266dSMatt Arsenault; GFX900:       ; %bb.0:
54937786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
54957786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
54967786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5497*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
5498*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
54997786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5500*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
55017786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
55027786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
55037786266dSMatt Arsenault;
55047786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_2_2:
55057786266dSMatt Arsenault; GFX90A:       ; %bb.0:
55067786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55077786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
55087786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
55097786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5510*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
5511*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s4
55127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5513*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
55147786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
55157786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
55167786266dSMatt Arsenault;
55177786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_2_2:
55187786266dSMatt Arsenault; GFX940:       ; %bb.0:
55197786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55207786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
55217786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
55227786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5523*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
5524*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s0
55257786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5526*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
55277786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
55287786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
55297786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
55307786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
55317786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
5532*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
55337786266dSMatt Arsenault  ret void
55347786266dSMatt Arsenault}
55357786266dSMatt Arsenault
55367786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_u_2() {
55377786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_u_2:
55387786266dSMatt Arsenault; GFX900:       ; %bb.0:
55397786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55407786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
55417786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
55427786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5543*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
5544*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshl_b32 s9, s4, 16
55457786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5546*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
55477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
55487786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
55497786266dSMatt Arsenault;
55507786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_u_2:
55517786266dSMatt Arsenault; GFX90A:       ; %bb.0:
55527786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
55547786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
55557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5556*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
5557*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshl_b32 s9, s4, 16
55587786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5559*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
55607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
55617786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
55627786266dSMatt Arsenault;
55637786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_u_2:
55647786266dSMatt Arsenault; GFX940:       ; %bb.0:
55657786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55667786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
55677786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
55687786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5569*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
5570*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshl_b32 s9, s0, 16
55717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5572*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
55737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
55747786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
55757786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
55767786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
55777786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>
5578*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
55797786266dSMatt Arsenault  ret void
55807786266dSMatt Arsenault}
55817786266dSMatt Arsenault
55827786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_0_2() {
55837786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_0_2:
55847786266dSMatt Arsenault; GFX900:       ; %bb.0:
55857786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55867786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
55877786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
55887786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
55897786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
55907786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
55917786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5592*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s5
5593*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
55947786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5595*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
55967786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
55977786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
55987786266dSMatt Arsenault;
55997786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_0_2:
56007786266dSMatt Arsenault; GFX90A:       ; %bb.0:
56017786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56027786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
56037786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
56047786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
56057786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
56067786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
56077786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5608*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s5
5609*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
56107786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5611*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
56127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
56137786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
56147786266dSMatt Arsenault;
56157786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_0_2:
56167786266dSMatt Arsenault; GFX940:       ; %bb.0:
56177786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56187786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
56197786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
56207786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
56217786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
56227786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
56237786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5624*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s1
5625*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
56267786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5627*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
56287786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
56297786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
56307786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
56317786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
56327786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>
5633*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
56347786266dSMatt Arsenault  ret void
56357786266dSMatt Arsenault}
56367786266dSMatt Arsenault
56377786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_1_2() {
56387786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_1_2:
56397786266dSMatt Arsenault; GFX900:       ; %bb.0:
56407786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56417786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
56427786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
56437786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
56447786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s4, s4, 16
56457786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
56467786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
56477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5648*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s9, s4, s5
5649*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
56507786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5651*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
56527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
56537786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
56547786266dSMatt Arsenault;
56557786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_1_2:
56567786266dSMatt Arsenault; GFX90A:       ; %bb.0:
56577786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56587786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
56597786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
56607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
56617786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s4, s4, 16
56627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
56637786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
56647786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5665*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s9, s4, s5
5666*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
56677786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5668*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
56697786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
56707786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
56717786266dSMatt Arsenault;
56727786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_1_2:
56737786266dSMatt Arsenault; GFX940:       ; %bb.0:
56747786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56757786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
56767786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
56777786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
56787786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
56797786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
56807786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
56817786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5682*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s9, s0, s1
5683*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
56847786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5685*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
56867786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
56877786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
56887786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
56897786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
56907786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>
5691*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
56927786266dSMatt Arsenault  ret void
56937786266dSMatt Arsenault}
56947786266dSMatt Arsenault
56957786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__u_3_3_3() {
56967786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__u_3_3_3:
56977786266dSMatt Arsenault; GFX9:       ; %bb.0:
56987786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56997786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5700*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s8
57017786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
5702*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s9, s8, s8
57037786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5704*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
57057786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
57067786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
57077786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
57087786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
57097786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
5710*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
57117786266dSMatt Arsenault  ret void
57127786266dSMatt Arsenault}
57137786266dSMatt Arsenault
57147786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__0_3_3_3() {
57157786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__0_3_3_3:
57167786266dSMatt Arsenault; GFX900:       ; %bb.0:
57177786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57187786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
57197786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
57207786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
57217786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
57227786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
57237786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5724*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s4, s5
5725*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
57267786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5727*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
57287786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
57297786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
57307786266dSMatt Arsenault;
57317786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__0_3_3_3:
57327786266dSMatt Arsenault; GFX90A:       ; %bb.0:
57337786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57347786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
57357786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
57367786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
57377786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
57387786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
57397786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5740*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s4, s5
5741*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
57427786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5743*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
57447786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
57457786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
57467786266dSMatt Arsenault;
57477786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__0_3_3_3:
57487786266dSMatt Arsenault; GFX940:       ; %bb.0:
57497786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57507786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
57517786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
57527786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
57537786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
57547786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
57557786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5756*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s0, s1
5757*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s1, s1
57587786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5759*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
57607786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
57617786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
57627786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
57637786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
57647786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
5765*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
57667786266dSMatt Arsenault  ret void
57677786266dSMatt Arsenault}
57687786266dSMatt Arsenault
57697786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__1_3_3_3() {
57707786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__1_3_3_3:
57717786266dSMatt Arsenault; GFX900:       ; %bb.0:
57727786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57737786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
57747786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
57757786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
57767786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
57777786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
57787786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5779*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s5
5780*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
57817786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5782*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
57837786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
57847786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
57857786266dSMatt Arsenault;
57867786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__1_3_3_3:
57877786266dSMatt Arsenault; GFX90A:       ; %bb.0:
57887786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57897786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
57907786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
57917786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
57927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
57937786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
57947786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5795*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s5
5796*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
57977786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5798*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
57997786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
58007786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
58017786266dSMatt Arsenault;
58027786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__1_3_3_3:
58037786266dSMatt Arsenault; GFX940:       ; %bb.0:
58047786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58057786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
58067786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
58077786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
58087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
58097786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
58107786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5811*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s1
5812*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s1, s1
58137786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5814*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
58157786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
58167786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
58177786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
58187786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
58197786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
5820*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
58217786266dSMatt Arsenault  ret void
58227786266dSMatt Arsenault}
58237786266dSMatt Arsenault
58247786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__2_3_3_3() {
58257786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__2_3_3_3:
58267786266dSMatt Arsenault; GFX9:       ; %bb.0:
58277786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58287786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5829*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s8
58307786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
5831*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s9, s8, s8
58327786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
5833*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
58347786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
58357786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
58367786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
58377786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
58387786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
5839*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
58407786266dSMatt Arsenault  ret void
58417786266dSMatt Arsenault}
58427786266dSMatt Arsenault
58437786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_u_3_3() {
58447786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_u_3_3:
58457786266dSMatt Arsenault; GFX900:       ; %bb.0:
58467786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58477786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
58487786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
58497786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5850*585858aeSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
5851*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
58527786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5853*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
58547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
58557786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
58567786266dSMatt Arsenault;
58577786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_u_3_3:
58587786266dSMatt Arsenault; GFX90A:       ; %bb.0:
58597786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58607786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
58617786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
58627786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5863*585858aeSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
5864*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
58657786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5866*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
58677786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
58687786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
58697786266dSMatt Arsenault;
58707786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_u_3_3:
58717786266dSMatt Arsenault; GFX940:       ; %bb.0:
58727786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58737786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
58747786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
58757786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5876*585858aeSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
5877*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
58787786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5879*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
58807786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
58817786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
58827786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
58837786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
58847786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
5885*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
58867786266dSMatt Arsenault  ret void
58877786266dSMatt Arsenault}
58887786266dSMatt Arsenault
58897786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_0_3_3() {
58907786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_0_3_3:
58917786266dSMatt Arsenault; GFX900:       ; %bb.0:
58927786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58937786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
58947786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
58957786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
58967786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
58977786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
58987786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
58997786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5900*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s6, s4
5901*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
59027786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5903*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
59047786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
59057786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
59067786266dSMatt Arsenault;
59077786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_0_3_3:
59087786266dSMatt Arsenault; GFX90A:       ; %bb.0:
59097786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59107786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
59117786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
59127786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
59137786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
59147786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
59157786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
59167786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5917*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s6, s4
5918*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
59197786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5920*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
59217786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
59227786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
59237786266dSMatt Arsenault;
59247786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_0_3_3:
59257786266dSMatt Arsenault; GFX940:       ; %bb.0:
59267786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59277786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
59287786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
59297786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
59307786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
59317786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
59327786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
59337786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5934*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s2, s0
5935*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s1, s1
59367786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5937*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
59387786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
59397786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
59407786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
59417786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
59427786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>
5943*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
59447786266dSMatt Arsenault  ret void
59457786266dSMatt Arsenault}
59467786266dSMatt Arsenault
59477786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_1_3_3() {
59487786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_1_3_3:
59497786266dSMatt Arsenault; GFX900:       ; %bb.0:
59507786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59517786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
59527786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
59537786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
59547786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
59557786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
59567786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
5957*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
5958*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
59597786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
5960*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
59617786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
59627786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
59637786266dSMatt Arsenault;
59647786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_1_3_3:
59657786266dSMatt Arsenault; GFX90A:       ; %bb.0:
59667786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59677786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
59687786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
59697786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
59707786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
59717786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
59727786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
5973*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
5974*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s5, s5
59757786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
5976*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
59777786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
59787786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
59797786266dSMatt Arsenault;
59807786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_1_3_3:
59817786266dSMatt Arsenault; GFX940:       ; %bb.0:
59827786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59837786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
59847786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
59857786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
59867786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
59877786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
59887786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
5989*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
5990*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s1, s1
59917786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
5992*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
59937786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
59947786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
59957786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
59967786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
59977786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
5998*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
59997786266dSMatt Arsenault  ret void
60007786266dSMatt Arsenault}
60017786266dSMatt Arsenault
60027786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_2_3_3() {
60037786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_2_3_3:
60047786266dSMatt Arsenault; GFX900:       ; %bb.0:
60057786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60067786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
60077786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
60087786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
60097786266dSMatt Arsenault; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
6010*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
6011*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
60127786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6013*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
60147786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
60157786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
60167786266dSMatt Arsenault;
60177786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_2_3_3:
60187786266dSMatt Arsenault; GFX90A:       ; %bb.0:
60197786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60207786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
60217786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
60227786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
60237786266dSMatt Arsenault; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
6024*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
6025*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s4
60267786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6027*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
60287786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
60297786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
60307786266dSMatt Arsenault;
60317786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_2_3_3:
60327786266dSMatt Arsenault; GFX940:       ; %bb.0:
60337786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60347786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
60357786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
60367786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
60377786266dSMatt Arsenault; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
6038*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
6039*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s0
60407786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6041*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
60427786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
60437786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
60447786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
60457786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
60467786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
6047*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
60487786266dSMatt Arsenault  ret void
60497786266dSMatt Arsenault}
60507786266dSMatt Arsenault
60517786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_u_3() {
60527786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__3_3_u_3:
60537786266dSMatt Arsenault; GFX9:       ; %bb.0:
60547786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60557786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
6056*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s9
60577786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
6058*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s8, s9, s9
60597786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
6060*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
60617786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
60627786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
60637786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
60647786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
60657786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
6066*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
60677786266dSMatt Arsenault  ret void
60687786266dSMatt Arsenault}
60697786266dSMatt Arsenault
60707786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_0_3() {
60717786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_0_3:
60727786266dSMatt Arsenault; GFX900:       ; %bb.0:
60737786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60747786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
60757786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
60767786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
60777786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
60787786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
60797786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
6080*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_lh_b32_b16 s9, s4, s5
6081*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
60827786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6083*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
60847786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
60857786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
60867786266dSMatt Arsenault;
60877786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_0_3:
60887786266dSMatt Arsenault; GFX90A:       ; %bb.0:
60897786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60907786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
60917786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
60927786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
60937786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
60947786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
60957786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
6096*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_lh_b32_b16 s9, s4, s5
6097*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
60987786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6099*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
61007786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
61017786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
61027786266dSMatt Arsenault;
61037786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_0_3:
61047786266dSMatt Arsenault; GFX940:       ; %bb.0:
61057786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61067786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
61077786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
61087786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
61097786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
61107786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
61117786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6112*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_lh_b32_b16 s9, s0, s1
6113*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
61147786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6115*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
61167786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
61177786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
61187786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
61197786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
61207786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
6121*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
61227786266dSMatt Arsenault  ret void
61237786266dSMatt Arsenault}
61247786266dSMatt Arsenault
61257786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_1_3() {
61267786266dSMatt Arsenault; GFX900-LABEL: s_shuffle_v4i16_v2i16__3_3_1_3:
61277786266dSMatt Arsenault; GFX900:       ; %bb.0:
61287786266dSMatt Arsenault; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61297786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
61307786266dSMatt Arsenault; GFX900-NEXT:    ; def s4
61317786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
61327786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
61337786266dSMatt Arsenault; GFX900-NEXT:    ; def s5
61347786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
6135*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s9, s4, s5
6136*585858aeSMatt Arsenault; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
61377786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMSTART
6138*585858aeSMatt Arsenault; GFX900-NEXT:    ; use s[8:9]
61397786266dSMatt Arsenault; GFX900-NEXT:    ;;#ASMEND
61407786266dSMatt Arsenault; GFX900-NEXT:    s_setpc_b64 s[30:31]
61417786266dSMatt Arsenault;
61427786266dSMatt Arsenault; GFX90A-LABEL: s_shuffle_v4i16_v2i16__3_3_1_3:
61437786266dSMatt Arsenault; GFX90A:       ; %bb.0:
61447786266dSMatt Arsenault; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61457786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
61467786266dSMatt Arsenault; GFX90A-NEXT:    ; def s4
61477786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
61487786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
61497786266dSMatt Arsenault; GFX90A-NEXT:    ; def s5
61507786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
6151*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s9, s4, s5
6152*585858aeSMatt Arsenault; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
61537786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMSTART
6154*585858aeSMatt Arsenault; GFX90A-NEXT:    ; use s[8:9]
61557786266dSMatt Arsenault; GFX90A-NEXT:    ;;#ASMEND
61567786266dSMatt Arsenault; GFX90A-NEXT:    s_setpc_b64 s[30:31]
61577786266dSMatt Arsenault;
61587786266dSMatt Arsenault; GFX940-LABEL: s_shuffle_v4i16_v2i16__3_3_1_3:
61597786266dSMatt Arsenault; GFX940:       ; %bb.0:
61607786266dSMatt Arsenault; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61617786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
61627786266dSMatt Arsenault; GFX940-NEXT:    ; def s0
61637786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
61647786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
61657786266dSMatt Arsenault; GFX940-NEXT:    ; def s1
61667786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
6167*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s9, s0, s1
6168*585858aeSMatt Arsenault; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
61697786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMSTART
6170*585858aeSMatt Arsenault; GFX940-NEXT:    ; use s[8:9]
61717786266dSMatt Arsenault; GFX940-NEXT:    ;;#ASMEND
61727786266dSMatt Arsenault; GFX940-NEXT:    s_setpc_b64 s[30:31]
61737786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
61747786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
61757786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>
6176*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
61777786266dSMatt Arsenault  ret void
61787786266dSMatt Arsenault}
61797786266dSMatt Arsenault
61807786266dSMatt Arsenaultdefine void @s_shuffle_v4i16_v2i16__3_3_2_3() {
61817786266dSMatt Arsenault; GFX9-LABEL: s_shuffle_v4i16_v2i16__3_3_2_3:
61827786266dSMatt Arsenault; GFX9:       ; %bb.0:
61837786266dSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61847786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
6185*585858aeSMatt Arsenault; GFX9-NEXT:    ; def s9
61867786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
6187*585858aeSMatt Arsenault; GFX9-NEXT:    s_pack_hh_b32_b16 s8, s9, s9
61887786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMSTART
6189*585858aeSMatt Arsenault; GFX9-NEXT:    ; use s[8:9]
61907786266dSMatt Arsenault; GFX9-NEXT:    ;;#ASMEND
61917786266dSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
61927786266dSMatt Arsenault  %vec0 = call <2 x i16> asm "; def $0", "=s"()
61937786266dSMatt Arsenault  %vec1 = call <2 x i16> asm "; def $0", "=s"()
61947786266dSMatt Arsenault  %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
6195*585858aeSMatt Arsenault  call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)
61967786266dSMatt Arsenault  ret void
61977786266dSMatt Arsenault}
61987786266dSMatt Arsenault;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
61997786266dSMatt Arsenault; GFX90APLUS: {{.*}}
6200